Same Tree

写了个笨程序,总是出错。给出错误,仅以为戒

 1 /**
 2  * Definition for binary tree
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12     bool isSameTree(TreeNode *p, TreeNode *q) {
13         if(p==NULL&&q==NULL)
14             return true;
15         else if((p->left==NULL&&q->left!=NULL)||(p->left!=NULL&&q->left==NULL)||(p->right==NULL&&q->right!=NULL)||(p->right!=NULL&&q->right==NULL)||(p->val!=q->val)||(p->val==NULL&&q->val!=NULL)||(p->val!=NULL&&q->val==NULL)||(p==NULL&&q!=NULL)||(p!=NULL&&q==NULL))
16             return false;
17         else if(p!=NULL&&q!=NULL)
18         if(p->val==q->val)
19         {
20            //if(p->val==q->val)
21            //{
22                 bool lresult=isSameTree(p->left,q->left);
23                 bool rresult=isSameTree(p->right,q->right);
24                 return lresult&&rresult;
25            //}
26         }
27         else return false;
28         else return false;
29     }
30 };
View Code

错误是在else if((p->left==NULL&&q->left!=NULL)时,如果p为空,p->left肯定已经挂了。因此在写程序时应更谨慎。

正确代码:

 1 /**
 2  * Definition for binary tree
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12     bool isSameTree(TreeNode *p, TreeNode *q) {
13         if(p==NULL&&q==NULL)
14             return true;
15         else if(p!=NULL&&q!=NULL)
16         if(p->val==q->val)
17         {
18            //if(p->val==q->val)
19            //{
20                 bool lresult=isSameTree(p->left,q->left);
21                 bool rresult=isSameTree(p->right,q->right);
22                 return lresult&&rresult;
23            //}
24         }
25         else return false;
26         else return false;
27     }
28 };
View Code

 

posted @ 2013-12-14 20:17  蓝兔子  阅读(110)  评论(0编辑  收藏  举报