leetcode 65: Same Tree

来源:互联网 发布:java file 删除文件 编辑:程序博客网 时间:2024/04/26 12:50
Same TreeSep 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();    }};