我正在解决关于树木的几个问题以准备技术访谈。我偶然发现一个问题,看看一棵树(子集)的值是否与另一棵树(主树)的值匹配
例如
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中的节点(根,左和右)相同。 我应该在上面的代码中更改什么,以便我可以检查子树中的每个节点与主树的每个节点进行匹配?
答案 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);
}