[LeetCode] 101. Symmetric Tree Tree symmetry
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree is symmetric:
1
/ \
2 2
/ \ / \
3 4 4 3
But the following is not:
1
/ \
2 2
\ \
3 3
Note:
Bonus points if you could solve it both recursively and iteratively.
To judge whether a symmetric binary tree.
Solution 1: Non-recursive traversal by layer, each layer is symmetrical check.
Solution 2: recursion,
Wherein the left and right subtree subtree symmetrical conditions: 1) two nodes values are equal, or are empty. 2) the right subtree left subtree node and right node left symmetrical, left subtree right subtree node and right node left symmetrical
Java:Recursion
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
/** * 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 checkNodes(root.left, root.right); }
private boolean checkNodes(TreeNode left, TreeNode right){ if(left == null && right == null) return true; if(left==null || right== null ) return false; if(left.val != right.val) return false; return checkNodes(left.left, right.right) && checkNodes(left.right, right.left); } } |
Java: Iteration
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
|