• Leetcode 100 相同的树


    Leetcode 100相同的树

    数据结构定义:

    给定两个二叉树,编写一个函数来检验它们是否相同。
    
    如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
    
    示例 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;
            if(p == null || q == null)
                return false;
            if(p.val == q.val){
                boolean left = isSameTree(p.left,q.left);
                boolean right = isSameTree(p.right,q.right);
                return left && right;
            }
            return false;
        }
    }
    

    广度优先遍历迭代:

    /*
    * 思路: 运用两个Queue 分别保存两颗树的节点信息,并依次比较
    *
    */
    class Solution {
          public boolean isSameTree(TreeNode p, TreeNode q) {
          if(!checkSameTreeNode(p,q)){
              return false;
          }
          Queue<TreeNode> queueP = new LinkedList<>();
          Queue<TreeNode> queueQ = new LinkedList<>();
          queueP.add(p);
          queueQ.add(q);
          while(!(queueP.isEmpty() || queueQ.isEmpty())){
              TreeNode nodeP = queueP.poll();
              TreeNode nodeQ = queueQ.poll();
              if(!checkSameTreeNode(nodeP,nodeQ)){
                  return false;
              }
              if(nodeP != null){
                  queueP.add(nodeP.left);
                  queueP.add(nodeP.right);
              }
              if(nodeQ != null){
                  queueQ.add(nodeP.left);
                  queueQ.add(nodeQ.right);
              }
          }
          return true;
        }
    
        private boolean checkSameTreeNode(TreeNode p, TreeNode q){
            if(p == null && q == null)
                return true;
            if(p == null || q == null)
                return false;
            if(p.val == q.val)
                return true;
            return false;
        }
    }
    
  • 相关阅读:
    集合选数
    二分答案入门乱讲
    浅谈搜索剪枝
    数位DP
    RMQ问题与ST算法
    计数排序与基数排序
    主席树/函数式线段树/可持久化线段树
    树链剖分
    LCA问题
    树的直径、树的重心与树的点分治
  • 原文地址:https://www.cnblogs.com/CodingXu-jie/p/14042057.html
Copyright © 2020-2023  润新知