思路:递归。

null也是tree。

null tree

(definition)

Definition: (1) A tree which is empty. (2) A tree whose leaf nodes all have a null value.

 https://xlinux.nist.gov/dads/HTML/nulltree.html

 

public class Solution {
    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: 

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        if(q==null&&p==null)return true;
        if(q==null||p==null)return false;
        Stack<TreeNode> p1=new Stack<>();
        Stack<TreeNode> q1=new Stack<>();
        p1.push(p);
        q1.push(q);
        while(!p1.isEmpty()&&!q1.isEmpty()){
            TreeNode r1=p1.pop();
            TreeNode r2=q1.pop();
            if(r1.val!=r2.val)return false;
            if(r1.left!=null&&r2.left!=null){
                p1.push(r1.left);
                q1.push(r2.left);
            }else{
                if(r1.left!=null&&r2.left==null)return false;
                if(r1.left==null&&r2.left!=null)return false;
            }
            if(r1.right!=null&&r2.right!=null){
                p1.push(r1.right);
                q1.push(r2.right);
            }else{
                if(r1.right!=null&&r2.right==null)return false;
                if(r1.right==null&&r2.right!=null)return false;
            }
        }
        if(!p1.isEmpty()&&q1.isEmpty())return false;
        if(p1.isEmpty()&&!q1.isEmpty())return false;
        return true;
    }
}

 

posted on 2016-09-10 05:09  Machelsky  阅读(126)  评论(0)    收藏  举报