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); } }
原文:http://www.cnblogs.com/superzhaochao/p/6348022.html