101. Symmetric Tree
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree [1,2,2,3,4,4,3]
is symmetric:
1 / \ 2 2 / \ / \ 3 4 4 3
But the following [1,2,2,null,3,null,3]
is not:
1 / \ 2 2 \ \ 3 3
Note:
Bonus points if you could solve it both recursively and iteratively.
发现了,tree的题基本都靠recursive
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public boolean isSymmetric(TreeNode root) { if(root == null) return true; return rec(root.left,root.right); } public boolean rec(TreeNode p, TreeNode q){ if(p == null && q == null) return true;//When both left and right are null, meaning end. if(p == null || q == null) return false;//Means missing left or right, false. return ((p.val == q.val) && rec(p.left, q.right)&& rec(q.left, p.right)); } }
recursive太费空间,iteration也可以
class Solution { public boolean isSymmetric(TreeNode root) { if(root==null) return true; Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode left, right; if(root.left!=null){ if(root.right==null) return false; stack.push(root.left); stack.push(root.right); } else if(root.right!=null){ return false; } while(!stack.empty()){ right = stack.pop(); left = stack.pop(); if(right.val!=left.val) return false; if(left.left!=null){ if(right.right==null) return false; stack.push(left.left); stack.push(right.right); } else if(right.right!=null){ return false; } if(left.right!=null){ if(right.left==null) return false; stack.push(left.right); stack.push(right.left); } else if(right.left!=null){ return false; } } return true; } }
public class Solution { public boolean isSymmetric (TreeNode root) { if (root == null) return true; Stack<TreeNode> s = new Stack<>(); s.push(root.left); s.push(root.right); while (!s.isEmpty()) { TreeNode p = s.pop (); TreeNode q = s.pop (); if (p == null && q == null) continue; if (p == null || q == null) return false; if (p.val != q.val) return false; s.push(p.left); s.push(q.right); s.push(p.right); s.push(q.left); } return true; } }