給定兩個非空二叉樹 s 和 t,檢驗 s 中是否包含和 t 具有相同結構和節點值的子樹。s 的一個子樹包括 s 的一個節點和這個節點的所有子孫。s 也可以看做它自身的一棵子樹。
示例 1:
給定的樹 s:
3
/ \
4 5
/ \
1 2
給定的樹 t:
4
/ \
1 2
回傳 true,因為 t 與 s 的一個子樹擁有相同的結構和節點值。
示例 2:
給定的樹 s:
3
/ \
4 5
/ \
1 2
/
0
給定的樹 t:
4
/ \
1 2
回傳 false。
代碼如下:
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
bool isequal(struct TreeNode *s, struct TreeNode *t){
if (!s && !t) return true;
return (s && t && s->val==t->val && isequal(s->left, t->left) && isequal(s->right, t->right));
}
bool isSubtree(struct TreeNode* s, struct TreeNode* t){
if (!s) return false; //這一行代碼為什么不能刪去?
return (isequal(s, t) || isSubtree(s->left, t) || isSubtree(s->right, t));
}
uj5u.com熱心網友回復:
if (!s) return false; == 這是判斷示例2的情況。。uj5u.com熱心網友回復:
isSubtree(s->left, t) //這里的遞回沒有判斷s->left是不是null(null的情況是可能存在的),所以要在isSubtree里面做判斷isSubtree(s->right, t) //同理,這里也如此
如果改成
return isequal(s, t) || (s->left && isSubtree(s->left, t)) || (s->right && isSubtree(s->right, t))
那么isSubtree函式內就不需要判斷了
但是,從函式的設計來看,在isSubtree函式內判斷s是合理的,因為用戶在呼叫isSubtree,不一定會判斷引數是否為null,所以函式內部要盡量保證能容錯程式不崩潰。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/226550.html
標籤:C語言
上一篇:sockt http問題
下一篇:有沒有大佬能解答一下啊
