Что не так, если мы сравним 2 корня вместо данных для проблемы с 2 идентичными двоичными деревьями?

#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 не задал бы вопрос. На английском языке «идентичный» не всегда имеет такой строгий смысл. Например: «идентичные близнецы».