public static boolean identical(treenode<Integer> root1,treenode<Integer> root2)
{
boolean ans;
for(int i=0;i<root1.children.size();i++)
for(int j=0;j<root2.children.size();j++)
{
boolean subans=identical(root1.children.get(i),root2.children.get(j));
ans=subans;
}
if(root1.data==root2.data)
{
ans=true;
}/* what's wrong with the code*/
else{
ans=false;
}
return ans;
}/* how can i improve it ? */
我不能理解为什么我的代码不工作。请告诉我修复它的解决方案。
7条答案
按热度按时间rslzwgfq1#
在计算这些递归调用的布尔返回之前,您的
for
循环将遍历identical
的每个递归调用。换句话说,您并没有通过递归调用计算所有子级的数据。对于您的代码,我相信您可能只计算树中每个节点的最后一个子节点(沿着最右边)。您还有一个嵌套的for循环,这在本例中是不必要的。
我的建议是:
1)检查当前节点的值是否相同。如果不是,或者如果至少有一个为空,则立即返回FALSE。
2)检查两个节点的子节点大小是否相同。如果不是,则返回False。
3)对每个子节点进行递归调用。
这是一次深度优先、左侧优先的搜索。
tvz2xvvm2#
wr98u20j3#
在@Vansh Nandwani回答的基础上做了一些改进。SBT=相同的二叉树
uubf1zoe4#
9bfwbjaz5#
6kkfgxo06#
对于一般树
方法一:
//此解决方案可能无法通过某些测试用例,但方法2:完全正常工作
方法二:
gzjq41n47#
结构相同