标签:
[LeetCode]
https://leetcode.com/problems/symmetric-tree/
Total Accepted: 106639 Total Submissions: 313969 Difficulty: Easy
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.
题目的意思是判断一个树是否为对称的树。
又到了智商捉急的时候了。本以为要用广度优先遍历,然后用队列还有元素染色的方式去做。但是最基本的递归调用都不会了吗?
递归。
参考了LeetCode官方解答,递归的方法实现比较左右子树的左右子树是否对称。
不过确实可以提醒我一点,就是说,一个二叉树遍历的过程中不一定一定只有一个参数,也可以同时传了两个参数分别是左右好处是可以直接比较,当然这个时候需要把root放到两个参数上进行比较。
本来也不是一个很难得题目,需要自己更多的掌握技巧,另外,不要把事情想复杂。
递归很重要的一部分是终止条件的确定。这个一定要认真的去写。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isSymmetric(TreeNode root) {
return isMirror(root,root);
}
public boolean isMirror(TreeNode left,TreeNode right){
if(left == null && right == null) return true;
if(left == null || right == null) return false;
return (left.val == right.val) && isMirror(left.left,right.right) && isMirror(left.right,right.left);
}
}
AC:1ms
循环。
这个确实是用到了一个队列和两个节点的方式,勉强算是广度优先的搜索。原理和方法一是一样的。不再赘述。
需要注意一个,就是当left==null && right==null的时候并不是和方法一一样进行返回是 true,因为方法一是递归,递归的一个结束并不代表所有都结束,两个都为空代表这两个子树是相同的,所以返回true.而循环需要把所有的节点都遍历完才能确定返回结果,除非提前遇到不同的节点值而终止,所以是continue;
另外这个方法最后的return true就是对上面这个的补充,以为没有提前终止一直到最后都比较了,所以说明是镜像的。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isSymmetric(TreeNode root) {
Queue<TreeNode> q = new LinkedList<>();
q.add(root);
q.add(root);
while(!q.isEmpty()){
TreeNode left=q.poll();
TreeNode right=q.poll();
if(left==null && right==null) continue;
if(left==null || right==null) return false;
if(left.val != right.val) return false;
q.add(left.left);
q.add(right.right);
q.add(left.right);
q.add(right.left);
}
return true;
}
}
AC:3ms
2016 年 05月 8日
标签:
原文地址:http://blog.csdn.net/fuxuemingzhu/article/details/51345707