看到这道题,第一思考是结构和节点完全相同
第一次,就没有思考null的情况
if(p.val == q.val && p.left.val == q.left.val && p.right.val == q.right.val) { return true; } else return false;
这个就导致以下错误,就是空指针的错误
java.lang.NullPointerException at line 12, Solution.isSameTree at line 54, __DriverSolution__.__helper__ at line 81, __Driver__.main
然后修改的代码
if(p == null && q == null) { return true; } else if(p != null && q != null) { if(p.val == q.val && p.left.val == q.left.val && p.right.val == q.right.val) { return true; } return false; } else return false;
然而,也出现了空指针的错误,仔细查看代码后,发现了问题所在,就是只考虑了p的null与q的null,不能保证p.left,q.left,p.right,q.right是否为空,
那么,他们判断是否为null,依然和p,q是否为null是类似的,那么在这里就可以利用递归。
采用isSameTree(p,q)这个函数,就可以采用isSameTree(p.left,q.left)和isSameTree(p.right,q.right),就可以避免null
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { if(p == null && q == null) { return true; } else if(p != null && q != null) { if(p.val == q.val && isSameTree(p.left,q.left) && isSameTree(p.right,q.right)) { return true; } return false; } else return false; } }