zoukankan      html  css  js  c++  java
  • 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;
        }
  • 相关阅读:
    菖蒲河公园-中山公园-天安门广场一日游
    LeetCode 485 Max Consecutive Ones
    LeetCode 766. Toeplitz Matrix
    LeetCode 566 Reshape the Matrix
    LeetCode 561. Array Partition I
    算法学习系列之(1):常用算法设计方法
    纪念2017,展望2018
    Java server数据之(4):Redis鸟瞰
    《机器学习》读书笔记-第一章 引言
    node.js实践第二天
  • 原文地址:https://www.cnblogs.com/skillking/p/9710016.html
Copyright © 2011-2022 走看看