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 };
错误是在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 };