(剑指Offer)面试题59:对称的二叉树
来源:互联网 发布:linux ftp和vsftp 编辑:程序博客网 时间:2024/05/18 23:29
题目:
请实现一个函数,用来判断一颗二叉树是不是对称的。
注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
思路:
对于一棵二叉树,从根结点开始遍历,
如果左右子结点有一个为NULL,那么肯定不是对称二叉树;
如果左右子结点均不为空,但不相等,那么肯定不是对称二叉树;
如果左右子结点均不为空且相等,那么
遍历左子树,遍历顺序为:当前结点,左子树,右子树;
遍历右子树,遍历顺序为:当前结点,右子树,左子树;
如果遍历左子树的序列和遍历右子树的序列一样,那么该二叉树为对称的二叉树。(递归实现)
另外一种角度考虑:
把每个结点的左右子树分别看成一棵独立的二叉树,那么判断该二叉树是否为对称的,只需判断左右子树是否互为镜像即可。
在线测试OJ:
http://www.nowcoder.com/books/coding-interviews/ff05d44dfdb04e1d83bdbdab320efbcb?rp=3
AC代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class
Solution {
public
:
bool
isSymmetrical(TreeNode* pRoot)
{
return
isSymetrical(pRoot,pRoot);
}
bool
isSymetrical(TreeNode* pLeft,TreeNode* pRight){
if
(pLeft==NULL && pRight==NULL)
return
true
;
if
(pLeft==NULL || pRight==NULL)
return
false
;
if
(pLeft->val!=pRight->val)
return
false
;
return
isSymetrical(pLeft->left,pRight->right) && isSymetrical(pLeft->right,pRight->left);
}
};
0 0
- (剑指Offer)面试题59:对称的二叉树
- (剑指Offer)面试题59:对称的二叉树
- 【剑指Offer学习】【面试题59:对称的二叉树】
- 剑指offer-面试题59:对称的二叉树
- 剑指offer--面试题59:对称的二叉树
- 剑指offer-面试题59-对称的二叉树
- 剑指offer 面试题59 对称的二叉树
- 剑指offer面试题[59]-对称的二叉树
- 剑指offer面试题59 对称的二叉树(java实现)
- 【剑指offer】面试题28:对称的二叉树
- 剑指offer--面试题28:对称的二叉树
- 剑指Offer面试题59:对称二叉树 Java实现
- 【剑指Offer】面试题59:对称二叉树
- 《剑指Offer》学习笔记--面试题59:对称的二叉树
- 剑指offer——面试题59:对称的二叉树
- 面试题59:对称的二叉树
- 面试题59:对称的二叉树
- 面试题59-对称的二叉树
- java泛型详解
- Core OS 层
- HDU5808(Bestcoder Round86)Price List Strike Back
- jsp中的request内置对象
- Kettle 系列1
- (剑指Offer)面试题59:对称的二叉树
- 第62篇Chrome扩展蓝牙开发(二)
- inline内联函数
- Linux中C语言的预处理
- Chapter 4 前后查找
- codeforces723d
- 快速排序Sort调用
- 一个好用的Tag函数
- python3的虚拟环境