leetcode--Symmetric Tree
2015-06-05 15:38
316 查看
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree is symmetric:
But the following is not:
Note:
Bonus points if you could solve it both recursively and iteratively.
confused what
> read more on how binary tree is serialized on OJ.
分类:二叉树
题意:判断一棵二叉树是否对称
解法1:递归。判断是否左右子树是否相等。具体方法是如果都为空,则返回真,否则判断是否其中一个为空,或者值不相等,则返回假。否则最后递归判断左右子树。
解法2:使用栈代替递归。左子树顺序入栈,右子树反向入栈。
/**
* 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) {
if(root==null) return true;
Stack<TreeNode> leftStack = new Stack<TreeNode>();
Stack<TreeNode> rightStack = new Stack<TreeNode>();
leftStack.add(root.left);
rightStack.add(root.right);
while(leftStack.size()>0&&rightStack.size()>0){
TreeNode left = leftStack.pop();
TreeNode right = rightStack.pop();
if(left!=null&&right==null) return false;
if(left==null&&right!=null) return false;
if(left!=null&&right!=null){
if(left.val!=right.val) return false;
//左右子树入栈方向相反
leftStack.add(left.left);
leftStack.add(left.right);
rightStack.add(right.right);
rightStack.add(right.left);
}
}
return true;
}
}
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.
分类:二叉树
题意:判断一棵二叉树是否对称
解法1:递归。判断是否左右子树是否相等。具体方法是如果都为空,则返回真,否则判断是否其中一个为空,或者值不相等,则返回假。否则最后递归判断左右子树。
/** * 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) { if(root==null) return true; return solve(root.left, root.right); } public boolean solve(TreeNode left,TreeNode right){ if(left==null&&right==null) return true;// if((left!=null && right==null) || (left==null && right!=null) || (left.val!=right.val)) return false; return solve(left.left, right.right)&&solve(left.right, right.left); } }
解法2:使用栈代替递归。左子树顺序入栈,右子树反向入栈。
/**
* 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) {
if(root==null) return true;
Stack<TreeNode> leftStack = new Stack<TreeNode>();
Stack<TreeNode> rightStack = new Stack<TreeNode>();
leftStack.add(root.left);
rightStack.add(root.right);
while(leftStack.size()>0&&rightStack.size()>0){
TreeNode left = leftStack.pop();
TreeNode right = rightStack.pop();
if(left!=null&&right==null) return false;
if(left==null&&right!=null) return false;
if(left!=null&&right!=null){
if(left.val!=right.val) return false;
//左右子树入栈方向相反
leftStack.add(left.left);
leftStack.add(left.right);
rightStack.add(right.right);
rightStack.add(right.left);
}
}
return true;
}
}
相关文章推荐
- 大话设计模式(三)动态代理设计模式
- iOS storyboard 对添加的View Controller编程方法
- 大话设计模式(三)动态代理设计模式
- OpenXmlSdk导出Excel
- 非接触式电子音乐控制器CHIMAERA
- VC编译错误: Nafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12已经在dllmain.obj 中定义
- 使用Gson将类和json字符串相互转换
- JVM中java对象的生命周期
- linux mail命令用法浅析【用最简单的测试一下就可以了如 "mail 真实的邮箱账号"具体操作见下一篇文章】
- IIC driver 重要结构体
- java 后台访问https
- extern用法汇总
- StringUtils类常用方法
- __super
- 北京脑瘫少年高考使用单独考场 系物理尖子生
- MFC在其他线程中刷新主对话框中EDIT等控件数据
- Silverlight学习笔记(1)——样式的运用
- redis Can’t save in background: fork: Cannot allocate memory
- 代码覆盖率工具Cobertura
- [Python]Unicode转ascii码的一个好方法