【Sicily】1002. 等价二叉树
来源:互联网 发布:c语言新建文件步骤 编辑:程序博客网 时间:2024/06/05 12:18
题目描述
两个二叉树结构相同,且对应结点的值相同,我们称这两个二叉树等价.
例如:以下两个二叉树等价
1 1 / \ / \ 2 3 2 3
而以下两个则不等价
1 1 / \ / \ 2 3 3 2
以下两个也不等价
1 1 / \ / \ 2 3 2 2
给出两个二叉树p和q,判断它们是否等价.
p和q的结点数不多于100000,每个结点的数值在1和1000000000之间.
请为下面的Solution类实现解决上述问题的isEqual函数,函数的两个参数p和q分别代表两个二叉树的根节点,如果以p和q为根的二叉树等价则函数返回true,否则返回false.
/** Definition for a binary tree node. struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; */class Solution {public: bool isEqual(TreeNode* p, TreeNode* q) { }};
注意:你只需要提交Solution类的代码,你在本地可以编写main函数测试程序,但不需要提交main函数的代码,也不需要提交TreeNode的定义. 注意不要修改类和函数的名称.
解题思路
递归。
两棵树之间的关系,分为下面五种情况:
- 都有左右子树,递归遍历两个子树
- 都只有左子树,递归遍历左子树
- 都只有右子树,递归遍历右子树
- 都为叶子节点,直接判定当前值是否相同
- 其他情况,则两棵树不等价
AC代码
// Problem#: 20618// Submission#: 5142914// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/// All Copyright reserved by Informatic Lab of Sun Yat-sen University/** Definition for a binary tree node. struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; */class Solution {public: bool isEqual(TreeNode* p, TreeNode* q) { if (p->val != q->val) return false; if (p->left != NULL && p->right != NULL && q->left != NULL && q->right != NULL) return isEqual(p->left, q->left) && isEqual(p->right, q->right); else if (p->left != NULL && p->right == NULL && q->left != NULL && q->right == NULL) return isEqual(p->left, q->left); else if (p->left == NULL && p->right != NULL && q->left == NULL && q->right != NULL) return isEqual(p->right, q->right); else if (p->left == NULL && p->right == NULL && q->left == NULL && q->right == NULL) return true; else return false; }};
阅读全文
0 0
- [sicily] 1002. 等价二叉树
- [sicily] 1002. 等价二叉树
- 【Sicily】1002. 等价二叉树
- 1002. 等价二叉树
- 1002. 等价二叉树
- 1002.等价二叉树
- 1002. 等价二叉树
- 1002.等价二叉树
- 1002. 等价二叉树
- 1002. 等价二叉树
- LintCode_469_等价二叉树
- LintCode:等价二叉树
- lintcode ----等价二叉树
- 等价二叉树
- 等价二叉树-lintcode
- 等价二叉树,lintcode
- lintcode-->等价二叉树
- lintcode,等价二叉树
- Android (BroadcastReceiver基础)
- python 线程、协程简单使用
- Service使用技巧
- HDU 4798 Skycity【计算机几何】【阅读题】
- MQTT,RabbitMQ初步使用
- 【Sicily】1002. 等价二叉树
- CPaintDC 、CWindowDC、 CClientDC、 CDC的区别与联系
- 递归
- 面试题45:圆圈中最后剩下的数字
- bzoj 3782 上学路线
- 浅谈指针
- Android开发教程
- NAT技术与代理服务器
- jQuery -- touch事件之左右切换元素