zoukankan      html  css  js  c++  java
  • 相同的树

    二叉树的遍历

    前序遍历:

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode() {}
     *     TreeNode(int val) { this.val = val; }
     *     TreeNode(int val, TreeNode left, TreeNode right) {
     *         this.val = val;
     *         this.left = left;
     *         this.right = right;
     *     }
     * }
     */
    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){
              return  isSameTree(p.left,q.left) && isSameTree(p.right,q.right); 
            }else{
                return false;
            }
        }
    }
    

    层次遍历

    
    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode() {}
     *     TreeNode(int val) { this.val = val; }
     *     TreeNode(int val, TreeNode left, TreeNode right) {
     *         this.val = val;
     *         this.left = left;
     *         this.right = right;
     *     }
     * }
     */
    class Solution {
        public boolean isSameTree(TreeNode p, TreeNode q) {
            Queue<TreeNode> s1 = new LinkedList<>();
            Queue<TreeNode> s2 = new LinkedList<>();
            if(p == null && q == null) return true;
            if(p == null || q ==null) return false;
            s1.add(p);s2.add(q);
            while(!s1.isEmpty() && !s2.isEmpty()){
                int size1 = s1.size();
                for(int i=0;i<size1;i++){
                  TreeNode t1 = s1.poll();
                  TreeNode t2 = s2.poll();
                  if(t1.val != t2.val) return false;
                  //下面的if判断可以保证两个队列的大小一定相等否则就直接返回false了    
                  if(t1.left != null && t2.left != null){
                      s1.add(t1.left);
                      s2.add(t2.left);
                  }
                 if(t1.right != null && t2.right != null){
                      s1.add(t1.right);
                      s2.add(t2.right);
                  }
                  if(t1.left != null ^ t2.left != null){//异或,当一个为null,一个不为null时为真
                      return false;
                  }
                  if(t1.right != null ^ t2.right != null){
                      return false;
                  }
    
                }
            }
            return true;
            
        }
    
    }
    
    

    两个解法时间复杂度都差不多

  • 相关阅读:
    NXOpen测量柱面两条边的最近距离
    NXOpen打开当前部件所在目录
    NXOpen 一键移除参数
    NXOpen 特征、体、线、圆弧、点通过迭代器遍历
    NXOpen批量创建部件
    NXOpen 创建圆柱面中心线
    NXOpen创建基准座标
    NXOpen 通过迭代器获取工作部件的体、面、边、点
    NXOpen 通过部件迭代器获取已加载部件的全路径
    NXOpen 批量导出STP、IGS、DWG、DXF、PDF(五合一)
  • 原文地址:https://www.cnblogs.com/cstdio1/p/13454531.html
Copyright © 2011-2022 走看看