一棵树的值与其他树匹配

时间:2014-03-31 02:54:45

标签: algorithm recursion tree binary-tree

我正在解决关于树木的几个问题以准备技术访谈。我偶然发现一个问题,看看一棵树(子集)的值是否与另一棵树(主树)的值匹配

例如

          3     is part of                4  
         / \    ----------->             / \
        7   9                           3   7
                                           / \
                                          8   9

我提出了以下解决方案。

public static boolean isSubset(TreeNode<String> subNode, TreeNode<String> mainNode){
    if(subNode == null)     
        return true;

    if(mainNode == null)
        return false;

    if(subNode.data.equals(mainNode.data)){
        return (isSubset(subNode.left,mainNode) && isSubset(subNode.right,mainNode));
    }else{
        return (isSubset(subNode,mainNode.left) || isSubset(subNode,mainNode.right)); 
    }
}

但是此解决方案仅检查节点是否与mainTree中的节点(根,左和右)相同。 我应该在上面的代码中更改什么,以便我可以检查子树中的每个节点与主树的每个节点进行匹配?

1 个答案:

答案 0 :(得分:0)

如果我了解您的要求,您根本不关心树木结构;您只需要测试以subNode为根的树的每个元素是否存在于以mainNode为根的树中。我建议您开发一个谓词(让我们称之为contains)来测试单个值是否在树中。然后你可以建立在那个:

public static boolean isSubset(TreeNode<String> subNode, TreeNode<String> mainNode){
    if(subNode == null)     
        return true;

    if(mainNode == null)
        return false;

    return mainNode.contains(subNode.data)
        && isSubset(subNode.left, mainNode)
        && isSubset(subNode.right, mainNode);
}