LintCode 等价二叉树
来源:互联网 发布:切换ip软件 编辑:程序博客网 时间:2024/06/02 05:31
1.描述
检查两棵二叉树是否等价。等价的意思是说,首先两棵二叉树必须拥有相同的结构,并且每个对应位置上的节点上的数都相等。
1 1 / \ / \ 2 2 and 2 2 / /4 4
就是两棵等价的二叉树。
1 1 / \ / \ 2 3 and 2 3 / \4 4
就不是等价的。
2.分析
该题和克隆二叉树有异曲同工之秒,两颗二叉树必须拥有相同的结构,并且对应位置上的节点值也相同。
先判断当前节点的值是否相同,之后按照相同的结构走下去判断后面的节点值是否也相同。
下面给出我两个AC代码,第一个代码在函数外定义了一个全局变量flag作为标志,第二个代码直接定义了
bool函数。相比之下,好像第二个高端大气一点O(∩_∩)O~
3.代码
(1)
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @aaram a, b, the root of binary trees.
* @return true if they are identical, or false.
*/
int flag=0;//flag作为标志,初始值为0,一旦有任何节点不相等,flag变为1
void panduan(TreeNode* a, TreeNode* b)
{
if(a==NULL)
{
if(b!=NULL)
flag=1;
return;
}
if(b==NULL)
{
if(a!=NULL)
flag=1;
return;
}
if(a->val!=b->val)
flag=1;
//cout<<flag<<endl;
panduan(a->left,b->left);
panduan(a->right,b->right);
}
bool isIdentical(TreeNode* a, TreeNode* b) {
// Write your code here
panduan(a,b);
if(flag==0) return 1;//若flag为0无变化,说明所有节点都有相同结构相同值
else return 0;//若flag为1,则有节点不同
}
};
(2)
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @aaram a, b, the root of binary trees.
* @return true if they are identical, or false.
*/
bool panduan(TreeNode* a, TreeNode* b)
{
if(a==NULL&&b==NULL)//若当前两个节点都为空,则当前两节点相同
return true;
if(a!=NULL&&b!=NULL&&a->val==b->val)
return panduan(a->left,b->left)&&panduan(a->right,b->right);//对下面的节点进行比较,都相同时return true
return false;
}
bool isIdentical(TreeNode* a, TreeNode* b) {
// Write your code here
return panduan(a,b);
}
};
4.总结
等价二叉树,只有当两棵树结构和对应位置的节点值都相同时才等价。因此当前节点值比较完后
两棵树的节点应该按照同样的结构遍历子树进而继续判断节点值。当两个节点都为空时虽然没有
节点值但他们也是相等的。
- LintCode:等价二叉树
- lintcode ----等价二叉树
- 等价二叉树-lintcode
- 等价二叉树,lintcode
- lintcode-->等价二叉树
- lintcode,等价二叉树
- LintCode-等价二叉树
- LIntCode 等价二叉树
- 等价二叉树-LintCode
- Lintcode 等价二叉树
- LintCode 等价二叉树
- 等价二叉树-LintCode
- LintCode - 469.等价二叉树
- lintcode 469 等价二叉树
- LintCode 469-等价二叉树
- [LintCode]469.等价二叉树
- [Lintcode] #469 等价二叉树
- lintCode(469)——等价二叉树
- 编程规范 写 if 语句不要任性
- Android中全屏或者取消标题栏
- Codeforces-797E-Array Queries(dp)
- test
- 用pyenv 和 virtualenv 搭建单机多版本python 虚拟开发环境
- LintCode 等价二叉树
- 用Python使用CNTK
- CCF学生排队
- 类的静态成员
- 基于tensorflow的深度学习MultiGPU训练实战
- blockchain区块链是什么?
- L2-022. 重排链表
- 【taotao】JS跨域
- boostrap的输入框设置禁止手动拖拽改变大小,也就是css3属性