leetcode------Symmetric Tree

标题: Symmetric Tree
通过率: 31.1%
难度: 简单

 

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.

这几天在忙期末考试,实在是抽不出来时间去刷题,今天随便打开了一道,吓尿了,题目都好长啊,我看了半天没有看懂他的解释,我还是按照自己的理解去写吧,写了三道树的题目,我感觉树的题目千篇一律,就是递归后怎么去处理了。看了这道题目,就是判断这个树是不是个完全对称树,我想了下,递归的时候就是就让树同时迭代左右,然后根据对称性,我画一个最简单的图:

上图的节点的数字是节点的编号,不是值,把树成左右判断。相当于分成了 2,3 然后就是2的右边要和3的左边相同(即5,6要相同),2的左边要和3的右边相同(即4,7要相同),以此类推,

如果中间有单个空或者值不同就返回false,

直接读递归的代码,能加深理解,具体的代码如下:比较简洁:

 1 /**
 2  * Definition for binary tree
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode(int x) { val = x; }
 8  * }
 9  */
10 public class Solution {
11     public boolean isSymmetric(TreeNode root) {
12         if(root==null) return true;
13         return issame( root.left, root.right);
14     }
15     public boolean issame(TreeNode left,TreeNode right){
16         if(left==null&&right==null) return true;
17         if(left!=null &&right==null) return false;
18         if(left==null &&right !=null)return false;
19         if(left.val!=right.val) return false;
20         else 
21         return issame(left.right,right.left)&&issame(left.left,right.right);
22     }
23 }

 

posted @ 2014-12-21 21:57  pku_smile  阅读(167)  评论(0编辑  收藏  举报