100. Same Tree

一、题目

  1、审题

  2、分析

    给出两个二叉树,判断这两个二叉树是否完全相同。

二、解答

  1、思路:

    方法一、

      采用两个队列分别对两个二叉树进行层次遍历。

      遍历时比较两个二叉树结点值是否相同。

public boolean isSameTree(TreeNode p, TreeNode q) {
    
        Queue<TreeNode> queue1 = new LinkedList<TreeNode>();
        queue1.add(p);
        Queue<TreeNode> queue2 = new LinkedList<TreeNode>();
        queue2.add(q);
        while(!queue1.isEmpty() && !queue2.isEmpty()) {
            TreeNode cur1 = queue1.poll();
            TreeNode cur2 = queue2.poll();
            
            if(cur1 != null && cur2 != null) {
                if(cur1.val != cur2.val)
                    return false;
                queue1.add(cur1.left);
                queue1.add(cur1.right);
                
                queue2.add(cur2.left);
                queue2.add(cur2.right);
            }
            else if(cur1 == null && cur2 == null)
                continue;
            else 
                return false;
            
        }
        return queue2.isEmpty() && queue1.isEmpty();
    }

   

    方法二、

      采用一个队列存放 q、p 两个二叉树节点,每次比较时取出两个连续的队头节点进行比较。

public boolean isSameTree(TreeNode p, TreeNode q) {
        if(p == null && q == null)
            return true;
        if(p == null || q == null)
            return false;
        
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.add(p);
        queue.add(q);
        while(!queue.isEmpty()) {
            TreeNode cur1 = queue.poll();
            TreeNode cur2 = queue.poll();
            
            if(cur1 == null && cur2 == null) 
                continue;
            else if(cur1 == null || cur2 == null || cur1.val != cur2.val)
                return false;
            
            queue.add(cur1.left);
            queue.add(cur2.left);
            queue.add(cur1.right);
            queue.add(cur2.right);
        }
        
        return true;
    }

    方法三、

      利用递归依次判断 left 与 right 子树是否相同。

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);
        
        return false;
    }
原文地址:https://www.cnblogs.com/skillking/p/9710016.html