[LeetCode]Symmetric Tree
第一个是递归方法,第二个是非递归方法
public class Solution { public boolean isSymmetric(TreeNode root) { if (root == null) { return true; } return helper(root.left, root.right); } public boolean helper(TreeNode n1, TreeNode n2) { if (n1 == null && n2 == null) { return true; } if (n1 == null || n2 == null) { return false; } if (n1.val != n2.val) { return false; } return helper(n1.left, n2.right) && helper(n1.right, n2.left); } }
public class Solution { public boolean isSymmetric(TreeNode root) { if (root == null) { return true; } Stack<TreeNode> stack1 = new Stack<TreeNode>(); Stack<TreeNode> stack2 = new Stack<TreeNode>(); TreeNode p1 = root; TreeNode p2 = root; while (p1 != null && p2 != null) { stack1.push(p1); stack2.push(p2); p1 = p1.left; p2 = p2.right; } if (p1 != null || p2 != null) { return false; } while (!stack1.isEmpty() && !stack2.isEmpty()) { p1 = stack1.pop(); p2 = stack2.pop(); if (p1.val != p2.val) { return false; } if (p1.right != null && p2.left != null) { p1 = p1.right; p2 = p2.left; } else if (p1.right != null || p2.left != null) { return false; } else { p1 = null; p2 = null; } while (p1 != null && p2 != null) { stack1.push(p1); stack2.push(p2); p1 = p1.left; p2 = p2.right; } if (p1 != null || p2 != null) { return false; } } return stack1.isEmpty() && stack2.isEmpty(); } }