1. Question
判断一个二叉树是否是对称的。
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. OJ's Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.
Here's an example:
1 / 2 3 / 4 5
The above binary tree is serialized as "{1,2,3,#,#,4,#,#,5}"
.
2. Solution
考虑特殊情况:
- 树为空
采用分治法:
- 左子树顶点和右子树顶点相同
- 左子树顶点的左子树和右子树顶点的右子树对称
- 左子树顶点的右子树和右子树顶点的左子树对称
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { //if two trees are symmetric, return true public boolean isSymmetric( TreeNode left, TreeNode right ){ if( left==null && right==null ) return true; if( (left==null && right!=null) || (right==null && left!=null) ) return false; return (left.val == right.val) && (isSymmetric( left.left, right.right )) && (isSymmetric( left.right, right.left )); } public boolean isSymmetric(TreeNode root) { if( root == null ) return true; return isSymmetric( root.left, root.right ); } }