LeetCode:Same Tree

来源:互联网 发布:ubuntu 16.04 skype 编辑:程序博客网 时间:2024/06/06 01:37

Symmetric Tree思路一样,使用Map保存节点,key是节点在所在层索引,value是节点TreeNode.

package leetcode;import java.util.HashMap;import java.util.Map;public class SameTree {/** * @param args */public static void main(String[] args) {TreeNode node = new TreeNode(0);//node.left = new TreeNode(2);//node.right = new TreeNode(2);TreeNode node2 = new TreeNode(1);//node2.left = new TreeNode(2);SameTree s = new SameTree();System.out.println(s.isSameTree(node, node2));}public boolean isSameTree(TreeNode p, TreeNode q) {if (p == null && q != null) {return false;}if (p != null && q == null) {return false;}if (p == null && q == null) {return true;}if (p.val != q.val ) {return false;}Map<Integer, TreeNode> father1 = new HashMap<Integer, TreeNode>();Map<Integer, TreeNode> child1 = new HashMap<Integer, TreeNode>();father1.put(0, p);Map<Integer, TreeNode> father2 = new HashMap<Integer, TreeNode>();Map<Integer, TreeNode> child2 = new HashMap<Integer, TreeNode>();father2.put(0, q);while (true) {child1.clear();for (Integer key : father1.keySet()) {TreeNode node = father1.get(key);if (node.left != null) {child1.put(key * 2 + 0, node.left);}if (node.right != null) {child1.put(key * 2 + 1, node.right);}}child2.clear();for (Integer key : father2.keySet()) {TreeNode node = father2.get(key);if (node.left != null) {child2.put(key * 2 + 0, node.left);}if (node.right != null) {child2.put(key * 2 + 1, node.right);}}if (child1.isEmpty() && child2.isEmpty()) {break;} else {if (child1.isEmpty() && !child2.isEmpty()) {return false;} else if (!child1.isEmpty() && child2.isEmpty()) {return false;}}for (Integer index : child1.keySet()) {TreeNode node1 = child1.get(index);TreeNode node2 = child2.get(index);if (node2 == null || node2.val != node1.val) {return false;}}Map<Integer, TreeNode> temp = father1;father1 = child1;child1 = temp;temp = father2;father2 = child2;child2 = temp;}return true;            }}