輸入兩棵二叉樹a和b,判斷b是不是a的子結構。(約定空樹不是任意乙個樹的子結構)
b是a的子結構, 即 a中有出現和b相同的結構和節點值。
例如:
給定的樹 a:
3
/ \4 5
/ \1 2
給定的樹 b:
4
/ 1
返回 true,因為 b 與 a 的乙個子樹擁有相同的結構和節點值。
示例 1:
輸入:a = [1,2,3], b = [3,1]
輸出:false
示例 2:
輸入:a = [3,4,5,1,2], b = [4,1]
輸出:true
限制:0 <= 節點個數 <= 10000
遍歷a的所有子樹,拿來與b樹作比較就可以了。
bool aha
(struct treenode* a,
struct treenode* b)
// 如果b為空,說明當前節點是空節點,從某處到此的乙個分支已經完成了,如果沒有false出現,說明這個子樹是a的子樹
if(b ==
null
)// a與b不等,且b不為空
if(a->val != b->val && b !=
null
)// 此時應該return false,因為當前節點不一定是原始b的根節點,所以不能繼續向下判斷
return false;
// 如果ab相同,此時可以往下遍歷,確保ab的左右子樹都相同
if(a->val == b->val)
return false;
}void
dfs_a
(struct treenode* a,
struct treenode* b, bool *flag)
// a子樹與b比較if(
aha(a, b)
)else
}bool issubstructure
(struct treenode* a,
struct treenode* b)
// b為null,返回false
if(b ==
null
)return false;
bool *flag =
malloc
(sizeof
(bool));
*flag = false;
dfs_a
(a,b,flag)
;return
*flag;
}
子結構和子樹
一 判斷root2 是不是 root1 的子結構 空樹不是任何樹的子結構 step1.在樹root1中找到和root2的根結點的值一樣的結點r step2.判斷樹root1中以r為根結點的子樹是不是包含和樹root2一樣的結構。很明顯,這是乙個遞迴的過程。public class solution ...
二叉樹的子樹和子結構
子樹 是只要包含了乙個結點,就得包含這個結點下的所有節點。子結構 包含了乙個結點,可以只取左子樹或者右子樹,或者都不取。判斷乙個二叉樹是不是另乙個二叉樹子樹的 實現如下 class solution private bool issubtree treenode r1,treenode r2 ret...
二叉樹的子樹和子結構
子樹的意思是包含了乙個結點,就得包含這個結點下的所有節點,一棵大小為n的二叉樹有n個子樹,就是分別以每個結點為根的子樹。子結構的意思是包含了乙個結點,可以只取左子樹或者右子樹,或者都不取。直接上 這解釋起來也蛋疼。class solution public bool issubtree treeno...