Given two binary trees, write a function to check if they are the same or not.
Two binary trees are considered the same if they are structurally identical and the nodes have the same value.
Example 1:
Input: 1 1
/ \ / \
2 3 2 3
[1,2,3], [1,2,3]
Output: true
Example 2:
Input: 1 1
/ \
2 2
[1,2], [1,null,2]
Output: false
Example 3:
Input: 1 1
/ \ / \
2 1 1 2
[1,2,1], [1,1,2]
Output: false
解法一——递归
递归判断左子树和右子树是否相等
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p==null&&q==null)
return true;
if(p==null||q==null)
return false;
if(p.val==q.val)
return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);
else
return false;
}
Runtime: 2 ms, faster than 100.00% of Java online submissions for Same Tree.
Memory Usage: 36.8 MB, less than 54.43% of Java online submissions for Same Tree.
解法二——非递归
同时遍历两棵树,比较其节点的值是否相等
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p==null&&q==null)
return true;
if(p==null||q==null)
return false;
Queue<TreeNode> q1=new LinkedList<TreeNode>();
Queue<TreeNode> q2=new LinkedList<TreeNode>();
q1.add(p);
q2.add(q);
while(!q1.isEmpty()&&!q2.isEmpty())
{
TreeNode t1=q1.poll();
TreeNode t2=q2.poll();
if(t1.val!=t2.val)
return false;
q1.add(t1.left);
q1.add(t1.right);
q1.add(t2.left);
q1.add(t2.right);
}
return true;
}
Runtime: 2 ms, faster than 100.00% of Java online submissions for Same Tree.
Memory Usage: 36.8 MB, less than 54.43% of Java online submissions for Same Tree.