#java #tree
#java #дерево
Вопрос:
Это мой код для вопроса о 2 идентичных двоичных деревьях:
if(root1==null amp;amp; root2==null){
return true;
}
else if(root1==null amp;amp; root2!=null){
return false;
}
else if(root1!=null amp;amp; root2==null){
return false;
}
return root1.data==root2.data amp;amp; isIdentical(root1.left,root2.left) amp;amp; isIdentical(root1.right,root2.right);
}
Что не так, если в операторе return я изменил root1.data==root2.data на root1==root2
Комментарии:
1. Что не так, так это то, что вы проверяете идентичность вместо равенства, сравнивая только корни.
Ответ №1:
Если у вас есть два дерева в качестве входных данных, то это означает root1!=root2
. Когда мы говорим, что они идентичны, мы не имеем в виду, что это одно и то же, одно дерево, но они похожи на копии друг друга, что означает, что узлы различны, но значения в этих узлах совпадают. Итак, вам нужно сравнить данные в дереве, а не ссылки на узлы.
Если бы у нас было root1==root2
, то на самом деле у вас есть только одно дерево и две ссылки на него.
Комментарии:
1. Вы также объединяете идентичность с равенством. Идентичность означает, что это одно и то же дерево. Равенство означает, что они имеют одинаковое содержимое.
2. В OP говорится о «вопросе о 2 идентичных двоичных деревьях» . Очевидно, что «идентичный» здесь не имеет строгого смысла, на котором вы настаиваете, @MarquisofLorne, иначе OP не задал бы вопрос. На английском языке «идентичный» не всегда имеет такой строгий смысл. Например: «идентичные близнецы».