题目描述
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.
confused what"{1,#,2,3}"means? > read more on how binary tree is serialized on OJ.
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}".
题目意思比较明确,判断一棵树是不是镜像树,从中间对称。
很明显运用递归的方法。
对于一个根节点root,需要判断root.left和root.right是否对称,同时需要知道root.left子树和root.right子树本身也是对称的,也就是root.left.right.val == root.right.left.val && root.left.left.val == root.right.right.val,如果是true,结合递归的思想即可判断出来整棵树的对称的。
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isSymmetric(TreeNode root) {
if(root == null)
return true;
return isSysmmetric(root.left, root.right);
}
public boolean isSysmmetric(TreeNode node1, TreeNode node2){
if(node1 == null && node2==null)
return true;
if(node1!=null && node2!=null){
if(node1.val == node2.val)
return isSysmmetric(node1.left,node2.right)&&isSysmmetric(
node1.right, node2.left);
else
return false;
}else{
return false;
}
}
}