更新: 最好的解决方案应该是:
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);
}
更新: 谢谢大家,我知道你告诉我的其他解决方案,但我的问题是为什么我的解决方案不起作用。是因为我忽略了一些返回值吗?谢谢!
我已经编写了一个代码来确定两个二叉树是否相同,我使用递归方法来搜索树,但是这个代码有时候不起作用,请你帮忙解决一下? / p>
非常感谢! 这是代码:
/*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] 输出: 真正 预期: 假
答案 0 :(得分:0)
您只是为子树调用isSameTree,但不检查它们的返回值。简洁正确的版本:
{{1}}
另外,@ duffymo不正确,说明你需要使用.equals()而不是==。您正在比较val' s,它们是原语。
答案 1 :(得分:0)
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p!=null){
if(q!=null&&p.val==q.val){
if(!isSameTree(p.left, q.left)) return false;
if(!isSameTree(p.right, q.right)) return false;
return true;
}
else return false;
}else{
if(q!=null) return false;
}
return true;
}
答案 2 :(得分:0)
我假设您有一个get方法来检索数据。您可以解决的一种方法是让isSameTree方法接受空值然后进行比较。
public boolean isSameTree(TreeNode p, TreeNode q) {
if (p == q) {
return true;
}
if (p == null || q == null) {
return false;
}
return p.get().isSameTree(q.get()) &&
isSameTree(p.left(), q.left()) &&
isSameTree(p.right(), q.right());
}
另一种方法如下:
public boolean isSameTree(TreeNode p, TreeNode q)
{
if (p == null && q == null)
return true;
if (p != null && q != null)
return (p.get == q.get
&& isSameTree(p.left, q.left)
&& isSameTree(p.right, q.right));
return false;
}
答案 3 :(得分:0)
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if (p == null && q == null)
return true;
if (p != null && q != null)
return (p.val == q.val
&& isSameTree(p.left, q.left)
&& isSameTree(p.right, q.right));
return false;
}
}