• same tree(判断两颗二叉树是否相等)


    Input:     1         1
              /        / 
             2   3     2   3
    
            [1,2,3],   [1,2,3]
    
    Output: true
    

    Example 2:

    Input:     1         1
              /           
             2             2
    
            [1,2],     [1,null,2]
    
    Output: false
    

    Example 3:

    Input:     1         1
              /        / 
             2   1     1   2
    
            [1,2,1],   [1,1,2]
    
    Output: false

    判断两个二叉树是否相等。

    一:使用递归

    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;
        }

    二:根据遍历出来的顺序,但是由于遍历右左子树可能有一个为空,会影响结果。

    class Solution {
        StringBuilder sb1=new StringBuilder();
            StringBuilder sb2=new StringBuilder();
        public boolean isSameTree(TreeNode p, TreeNode q) {
            /**遍历:出现左右子树只有一个为空时,用null代替存储。所以直接用StringBuilder来存储遍历的结果。
                    
            */
            if(p==null&&q==null) return true;
            if(p==null||q==null) return false;
            
            bianLi(p,sb1);
            bianLi(q,sb2);
            return sb1.toString().equals(sb2.toString());
            
           
        }
        
        public void bianLi(TreeNode node,StringBuilder sb){
            if(node!=null){
                sb.append(node.val);
                if(node.left!=null&&node.right!=null){
                    bianLi(node.left,sb);
                    bianLi(node.right,sb);
                }
                if(node.left!=null){
                    bianLi(node.left,sb);
                    sb.append("null"); 
                }
                if(node.right!=null){
                    sb.append("null");
                    bianLi(node.right,sb);
                }
            }
            
            
        }
    }
    View Code

    但是,其实这里不需要输出遍历 的结果,只需要在遍历过程中对两者进行比较就行。

        public boolean isSameTree(TreeNode p, TreeNode q) {
       
                    
          
            if(p==null&&q==null) return true;
            if(p==null||q==null) return false;
            
            return bianLi2(p,q);
    }
    
    
     public boolean bianLi2(TreeNode node1,TreeNode node2){
            if(node1==null&&node2==null) return true;
            if(node1!=null&&node2!=null){
                if(node1.val!=node2.val) return false;
                return bianLi2(node1.left,node2.left)&&bianLi2(node1.right,node2.right);
            }
            return false;
        }

    三:可以不使用递归,使用深度遍历方法,也不需要输出遍历结果,只需在遍历时判断即可

            if(p==null&&q==null) return true;
            if(p==null||q==null) return false;
            
            //深度优先遍历
            
            Stack<TreeNode> s1=new Stack<>();
            Stack<TreeNode> s2=new Stack<>();
            s1.push(p);
            s2.push(q);
            while(!s1.isEmpty()&&!s2.isEmpty()){
                TreeNode node1=s1.pop();
                TreeNode node2=s2.pop();
                if(node1.val!=node2.val) return false;
                if(node1.right!=null) s1.push(node1.right);
                if(node2.right!=null) s2.push(node2.right);
                if(s1.size()!=s2.size()) return false;
                if(node1.left!=null) s1.push(node1.left);
                if(node2.left!=null) s2.push(node2.left);
                if(s1.size()!=s2.size()) return false;
            }
            return s1.size()==s2.size();
  • 相关阅读:
    安装DotNetCore.1.0.1-VS2015Tools.Preview2.0.2出现0x80072f8a未指定的错误
    [迷宫中的算法实践]迷宫生成算法——Prim算法
    [MVC学习笔记]7.使用极验验证来制作更高逼格的验证码
    Android UI--提高Android UI体验
    Genymotion的使用 -- A Faster Android Emulator
    【Xamarin】Visual Studio 2013 Xamarin for Android开发环境搭建与配置&Genymotion
    【ASP.NET Web API2】利用HttpClient调用Web API(TODO)
    VMware 11 安装 Mac OS X10.10
    ASP.NET MVC 缓存Outputcache (局部动态)
    【ASP.NET Web API2】初识Web API
  • 原文地址:https://www.cnblogs.com/xiaolovewei/p/8073799.html
Copyright © 2020-2023  润新知