Two binary trees are considered equal if they are structurally identical and the nodes have the same value.
Tree is defined as :
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
And my solution is
public boolean isSameTree(TreeNode p, TreeNode q) {
if(null == p && null == q){
return true;
}
if((null == p && null != q) || (null == q && null != p)){
return false;
}
if(p.val == q.val){
return isSameTree(p.left,q.left) ? isSameTree(p.right,q.right) :false;
} else {
return false;
}
}
Please suggest any improvements.
1 Answer 1
Your code already does its job well. It can be shortened a bit:
public boolean isSameTree(TreeNode p, TreeNode q) {
if (p == null || q == null) {
return p == q;
}
return p.val == q.val
&& isSameTree(p.left, q.left)
&& isSameTree(p.right, q.right);
}
I flipped the operands of the ==
operators since having null
in the right hand side reads more naturally.
I added spaces after the if
and after the commas to follow the common formatting style.
-
1\$\begingroup\$
p == null && q == null
can even be shorted top == q
in this case. \$\endgroup\$RoToRa– RoToRa2017年10月30日 08:22:59 +00:00Commented Oct 30, 2017 at 8:22 -
1\$\begingroup\$ @RolandIllig shorter code is not always better. I could not immediately determine why the
p==q
is correct here. So I would either comment it in, or be more verbose. btw I do really like the&&
in the return statement. \$\endgroup\$Rob Audenaerde– Rob Audenaerde2017年10月30日 14:20:29 +00:00Commented Oct 30, 2017 at 14:20