zoukankan      html  css  js  c++  java
  • 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();
  • 相关阅读:
    Appium 服务关键字(转)
    android自动化之appium的环境搭建
    关于性能测试几个名词概念的说明
    关于.net服务启动注册到zookeeper,但是注册节点20分钟自动消失解决办法
    关于tomcat启动报“this web application instance has been stopped already”的处理
    loadrunner在win10破解提示:Cannot save the license information because acceses to the registry is denied的解决办法
    Teamcity部署.net服务“无法连接到远程服务器”解决方式
    数据库主从不同步问题随笔
    eclipse 常用快捷键
    在linux中安装jdk以及tomcat并shell脚本关闭启动的进程
  • 原文地址:https://www.cnblogs.com/xiaolovewei/p/8073799.html
Copyright © 2011-2022 走看看