您的位置:首页 > 其它

【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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息