LeetCode100相同的树

描述:

给定两个二叉树,编写一个函数来检验它们是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

示例 1:

输入:  1         1
          / \       / \
        2   3     2   3

        [1,2,3],   [1,2,3]

输出: true
示例 2:

输入: 1          1
          /           \
       2             2

        [1,2],     [1,null,2]

输出: false
示例 3:

输入:  1       1
          / \       / \
        2   1   1   2

        [1,2,1],   [1,1,2]

输出: false

解法一(递归):

class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        if(p==null&&q==null){
            return true;
        }else if(p==null&&q!=null||p!=null&&q==null||p.val!=q.val){
            return false;
        }
        return isSameTree(p.left, q.left)&&isSameTree(p.right,q.right);
        
    }
}

解法二(迭代):

public boolean check(TreeNode p, TreeNode q) {
	    if (p == null && q == null) return true;
	    if (q == null || p == null) return false;
	    if (p.val != q.val) return false;
	    return true;
	  }

	  public boolean isSameTree(TreeNode p, TreeNode q) {
	    if (p == null && q == null) return true;
	    if (!check(p, q)) return false;

	    // init deques(双端队列)
	    ArrayDeque deqP = new ArrayDeque();
	    ArrayDeque deqQ = new ArrayDeque();
	    deqP.addLast(p);
	    deqQ.addLast(q);

	    while (!deqP.isEmpty()) {
	      p = deqP.removeFirst();
	      q = deqQ.removeFirst();

	      if (!check(p, q)) return false;
	      if (p != null) {
	        // in Java nulls are not allowed in Deque
	        if (!check(p.left, q.left)) return false;
	        if (p.left != null) {
	          deqP.addLast(p.left);
	          deqQ.addLast(q.left);
	        }
	        if (!check(p.right, q.right)) return false;
	        if (p.right != null) {
	          deqP.addLast(p.right);
	          deqQ.addLast(q.right);
	        }
	      }
	    }
	    return true;
	  }

 

你可能感兴趣的:(LeetCode,Java,算法)