2017.1.10 算法测试题集 - 1002 - 相等二叉树

来源:互联网 发布:淘宝身份证开过店 编辑:程序博客网 时间:2024/05/20 00:16

Problem

给定两棵二叉树,判断这两棵二叉树是否相等。当且仅当两棵树结构相同且对应节点的取值也相同时,两棵二叉树相等。

Example

A:  1   / \  2   3 / \   \5  6    7B:  1   / \  2   3 / \ / 5  6 7 C:  1   / \  2   3 / \   \5  6    7A==C,A!=B

Algorithm

联系树的结构来做,递归判断本节点以及左右子节点。

需要注意判断本节点是否为空。

其实这题是LeetCode上有的原题,博客上也写过: LeetCode #100 - Same Tree - Easy(http://blog.csdn.net/arcome/article/details/53103421)

第一次提交的代码如下。

//TLEclass 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去掉以后,居然就通过了 - -

通过的代码如下。

//ACclass 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;};

之前写这题时候的通过代码如下。与考试时候写的还是有区别的,在判断两个节点是否为空的判断写法有不同。

//BEFOREclass 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);        }    }};
0 0
原创粉丝点击