Same Tree
Sep 3 '12
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.
bad one recursive.
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
// Start typing your Java solution below
// DO NOT write main() function
if(p==null && q==null) return true;
else if( p==null || q==null) return false;
if( p.val != q.val) return false;
else return isSameTree( p.left, q.left) && isSameTree(p.right, q.right);
}
}
good one iterative.
public class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
// Start typing your Java solution below
// DO NOT write main() function
Queue<TreeNode> q1 = new LinkedList<TreeNode>();
Queue<TreeNode> q2 = new LinkedList<TreeNode>();
q1.offer(p);
q2.offer(q);
while( !q1.isEmpty() && !q2.isEmpty() ) {
TreeNode x = q1.poll();
TreeNode y = q2.poll();
if(x==null) {
if( y!=null) return false;
else continue;
}
if(y==null || x.val!=y.val) return false;
q1.offer( x.left);
q1.offer( x.right);
q2.offer(y.left);
q2.offer(y.right);
}
return true;
}
}
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isSameTree(TreeNode *p, TreeNode *q) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
queue<TreeNode*> q1;
queue<TreeNode*> q2;
q1.push(p);
q2.push(q);
while(!q1.empty() && !q2.empty()){
TreeNode* n1 = q1.front();
TreeNode* n2 = q2.front();
q1.pop();
q2.pop();
if(n1==nullptr && n2==nullptr) continue;
if(n1==nullptr || n2==nullptr) return false;
if( n1->val != n2->val) return false;
q1.push(n1->left);
q1.push(n1->right);
q2.push(n2->left);
q2.push(n2->right);
}
return q1.empty() && q2.empty();
}
};