LeetCode:Symmetric Tree

来源:互联网 发布:qq飞车ae86原装数据 编辑:程序博客网 时间:2024/06/02 20:57

对于depth=n的所有节点,可以将所有节点从左到右编号,0,1,....。

判断该层是否存在对称:编号为index的节点,找到其对称节点pow(2,n)-1-index,若不存在或val不相等则不是对称树。

使用数组保存节点在n较大的情况下很容易内存溢出,考虑使用Map,key是节点编号,value是TreeNode.


package leetcode;import java.util.HashMap;import java.util.Map;public class SymmetricTree {/** * @param args */public static void main(String[] args) {TreeNode node = new TreeNode(1);node.left = new TreeNode(2);//node.right = new TreeNode(2);SymmetricTree s = new SymmetricTree();System.out.println(s.isSymmetric(node));}public boolean isSymmetric(TreeNode root) {if (root == null) {return true;}Map<Integer, TreeNode> father = new HashMap<Integer, TreeNode>();Map<Integer, TreeNode> child = new HashMap<Integer, TreeNode>();father.put(0, root);int maxChildCount = 2;while (true) {child.clear();for (Integer key : father.keySet()) {TreeNode node = father.get(key);if (node.left != null) {child.put(key * 2 + 0, node.left);}if (node.right != null) {child.put(key * 2 + 1, node.right);}}if (child.isEmpty()) {//no childbreak;}for (Integer index : child.keySet()) {TreeNode node = child.get(index);int symmetricIndex = maxChildCount - 1 - index;TreeNode symmetricNode = child.get(symmetricIndex);if (symmetricNode == null || symmetricNode.val != node.val) {return false;}}father.clear();Map<Integer, TreeNode> temp = father;father = child;child = temp;maxChildCount *= 2;}return true;}}




原创粉丝点击