樹的子結構 遍歷子樹

2021-10-10 11:31:18 字數 1404 閱讀 7585

輸入兩棵二叉樹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...