Given two binary trees, write a function to check if they are equal or not.
Two binary trees are considered equal if they are structurally identical and the nodes have the same value.
Analysis:
Recursively check if left and right child, if they are different or there one is null, return false.
c++
bool 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;
}
Java
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;
}
iterative version
public boolean isSameTree2(TreeNode p, TreeNode q){
Stack<TreeNode> pstack = new Stack<>();
Stack<TreeNode> qStack = new Stack<>();
if(p==null) return q==null;
if(q==null) return p==null;
pstack.push(p);
qStack.push(q);
while(!pstack.isEmpty()&& !qStack.isEmpty()){
TreeNode t1 = pstack.pop();
TreeNode t2 = qStack.pop();
if(t1==null && t2==null) continue;
else if(t1!=null && t2!=null && t1.val==t2.val){
pstack.push(t1.left);
pstack.push(t1.right);
qStack.push(t2.left);
qStack.push(t2.right);
}else {
return false;
}
}
return true;
}