【Sicily】1002. 等价二叉树
2017-06-27 21:14
381 查看
题目描述
两个二叉树结构相同,且对应结点的值相同,我们称这两个二叉树等价.例如:以下两个二叉树等价
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; } };
相关文章推荐
- 【Sicily】1002. 等价二叉树
- [sicily] 1002. 等价二叉树
- [sicily] 1002. 等价二叉树
- 1002. 等价二叉树
- 【1002】等价二叉树
- 1002.等价二叉树
- 算法机考模拟题1002.等价二叉树
- sicily考试模拟题-1000超级和 1001会议室安排 1002二叉树比较
- 1002. 等价二叉树
- 1002. 等价二叉树
- 1002. 等价二叉树
- 1002.等价二叉树
- Sicily 1210. 二叉树
- Sicily 1210 二叉树
- Lintcode---等价二叉树
- Sicily 1210. 二叉树
- Sicily 1002. 数独游戏(sudoku)
- 等价二叉树
- lintcode:等价二叉树
- lintCode(469)——等价二叉树