Problem
给定两棵二叉树,判断这两棵二叉树是否相等。
当且仅当两棵树结构相同且对应节点的取值也相同时,两棵二叉树相等。
Example
A: 1
/ \
2 3
/ \ \
5 6 7
B: 1
/ \
2 3
/ \ /
5 6 7
C: 1
/ \
2 3
/ \ \
5 6 7
A==C,A!=B
Algorithm
联系树的结构来做,递归判断本节点以及左右子节点。
需要注意判断本节点是否为空。
其实这题是LeetCode上有的原题,博客上也写过: LeetCode #100 - Same Tree - Easy(http://blog.csdn.net/arcome/article/details/53103421)
第一次提交的代码如下。
//TLE
class Solution {
public:
bool isSameTree(TreeNode* p, TreeNode* q) {
if(p==NULL&&q==NULL) return true;
if(p==NULL&&q!=NULL||p!=NULL&&q==NULL) return false;
if(p->val==q->val) return isEqual(p->left,q->left)&isEqual(p->right,q->right);
else return false;
};
提交以后发现居然超时,然而并不知道是什么原因。于是尝试修改代码,把第7行的else去掉以后,居然就通过了 - -
通过的代码如下。
//AC
class Solution {
public:
bool isSameTree(TreeNode* p, TreeNode* q) {
if(p==NULL&&q==NULL) return true;
if(p==NULL&&q!=NULL||p!=NULL&&q==NULL) return false;
if(p->val==q->val) return isEqual(p->left,q->left)&isEqual(p->right,q->right);
return false;
};
之前写这题时候的通过代码如下。与考试时候写的还是有区别的,在判断两个节点是否为空的判断写法有不同。
//BEFORE
class Solution {
public:
bool isSameTree(TreeNode* p, TreeNode* q) {
if(p==NULL&&q==NULL){return true;}
else if(p==NULL||q==NULL){return false;}
if(p->val!=q->val){return false;}
else {
return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
}
}
};