zoukankan      html  css  js  c++  java
  • 判断两颗树是否相同

    tag: 二叉树

    package com.zhaochao.tree;
    
    import java.util.Stack;
    
    /**
     * Created by zhaochao on 17/1/24.
     * 两颗树相等,意味着 对应节点的值相等,且具备相同的左右子树
     */
    public class JudgeSameTree {
    
        //recursion
    public boolean isSame(TreeNode rootA, TreeNode rootB) {
    
        if(rootA == null && rootB == null) {
            return true;
        }
    
        if(rootA == null || rootB == null) {
            return false;
        }
    
        if(rootA.val != rootB.val) {
            return false;
        }
    
        return isSame(rootA.left, rootB.left) && isSame(rootA.right, rootB.right);
    }
    
        public boolean isSameTraversal(TreeNode rootA, TreeNode rootB) {
            if(rootA == null && rootB == null) {
                return true;
            }
            if(rootA == null || rootB == null) {
                return false;
            }
            if(rootA.val != rootB.val) {
                return false;
            }
    
            Stack<TreeNode> stackA = new Stack<TreeNode>();
            Stack<TreeNode> stackB = new Stack<TreeNode>();
    
            stackA.push(rootA);
            stackB.push(rootB);
    
            while((!stackA.isEmpty() && !stackB.isEmpty())) {
    
                TreeNode nodeA = stackA.pop();
                TreeNode nodeB = stackB.pop();
    
                if(nodeA.val != nodeB.val) {
                    return false;
                }
    
                if(nodeA.right != null && nodeB.right != null) {
                    stackA.push(nodeA.right);
                    stackB.push(nodeB.right);
                }
                else if(nodeA.right != null || nodeB.right != null) {
                    return false;
                }
    
                if(nodeA.left != null && nodeB.left != null) {
                    stackA.push(nodeA.left);
                    stackB.push(nodeB.left);
                }
                else if(nodeA.left != null || nodeB.left != null) {
                    return false;
                }
    
            }
    
            return true;
        }
    
    
        public static void main(String[] args) {
    
            TreeNode root = new TreeNode(0);
            TreeNode node1 = new TreeNode(1);
            TreeNode node2 = new TreeNode(2);
            TreeNode node3 = new TreeNode(3);
            //TreeNode node4 = new TreeNode(4);
    
            root.left = node1;
            root.right = node2;
            node2.left = node3;
            //node3.left = node4;
    
            TreeNode roota = new TreeNode(0);
            TreeNode nodea1 = new TreeNode(1);
            TreeNode nodea2 = new TreeNode(2);
            TreeNode nodea3 = new TreeNode(3);
    
            roota.left = nodea1;
            roota.right = nodea2;
            nodea2.left = nodea3;
    
            JudgeSameTree test  =  new JudgeSameTree();
            boolean result = test.isSameTraversal(root,roota);
    
            System.out.println(" is same : " + result);
        }
    
    }
    

      

  • 相关阅读:
    laravel执行migrate出现1071 字符串类型过长 异常
    Laravel关闭CSRF功能的两种方法
    webstome10破解及汉化
    spring-retry简单demo(附完整代码)
    git提交报错SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
    tomcat8的session共享实现方案
    idea下载安装指南
    《Maven实战》(许晓斌)导读(读书笔记&第二次读后感)
    spring cloud config搭建说明例子(四)-补充配置文件
    spring cloud config搭建说明例子(三)-添加actuator
  • 原文地址:https://www.cnblogs.com/superzhaochao/p/6348022.html
Copyright © 2011-2022 走看看