zoukankan      html  css  js  c++  java
  • 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;
        }
    }
    
  • 相关阅读:
    ruby直接底层连接数据库
    debian和ubuntu的sh dash bash
    find locate
    apt-get
    ERROR: The partition with /var/lib/mysql is too full! failed!
    linux访问ftp服务器命令
    win7配置ftp服务器
    黑马程序员_Java基础视频-深入浅出精华版--PPT 文件列表
    黑马程序员_Java基础视频-深入浅出精华版--视频列表
    转:Java项目开发规范参考
  • 原文地址:https://www.cnblogs.com/CodingXu-jie/p/14042057.html
Copyright © 2011-2022 走看看