Update: Лучшее решение должно быть:Java тест два бинарных деревьев одинаковы
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p==null&&q==null) return true;
if(p==null||q==null) return false;
return isSameTree(p.left, q.left)&&isSameTree(p.right, q.right)&&(p.val==q.val);
}
Обновление: Спасибо всем, я знаю, что эти другие решения, которые вы сказали мне, но мой вопрос почему мое решение не работает. Это потому, что я игнорирую некоторые возвращаемые значения? Спасибо!
Я написал код для определения, являются ли два бинарных деревьев одни и те же, я использовал рекурсивный метод для поиска по дереву, но этот код иногда не работает, не могли бы вы помочь мне понять это ?
Большое спасибо! Вот код:
/*Definition for a binary tree node.
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
*/
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p!=null){
if(q!=null&&p.val==q.val){
isSameTree(p.left, q.left);
isSameTree(p.right, q.right);
}
else return false;
}else{
if(q!=null) return false;
}
return true;
}
Вход: [10,5,15] [10,5, NULL, NULL, 15] Выход: истинный Ожидаемое: ложные
Если выходной ток не соответствует вашему желаемых результатов, и вы не знаете, почему, то пришло время, чтобы начать отладку. Если вы не знаете, как это сделать, пожалуйста, посмотрите: [Отладка небольших программ] (http://ericlippert.com/2014/03/05/how-to-debug-small- программы /). Он не решит вашу прямую проблему, но он даст вам шаги, которые вы можете выполнить, которые должны помочь вам решить ее самостоятельно или даже если это не удастся, а затем, по крайней мере, помочь вам лучше изолировать вашу проблему, чтобы ваш вопрос мог быть более сфокусированным и легче отвечать. –
isSameTree() имеет возвращаемое значение. Не игнорируйте его. –
@duffymo безопасно использовать == для int –