• 判断两颗树是否相同


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

      

  • 相关阅读:
    AES密码算法详解(转自https://www.cnblogs.com/luop/p/4334160.html)
    快速排序和插入排序——我的代码
    北京大学1001ACM——高精度类型题总结
    C语言数组不知道输入几个整数以及输入一直到为0
    C语言并查集例子——图问题巧用parent[]数组
    C语言快速判断素数——不超时
    C语言如何才能使用bool类型
    C语言两个特别大的整数类型相加超出范围使用两个技巧
    C语言存30位数字长的十进制方法
    dockerfile相关命令
  • 原文地址:https://www.cnblogs.com/superzhaochao/p/6348022.html
Copyright © 2020-2023  润新知