JZ17 劍指offer 樹的子結構

2021-10-13 14:04:42 字數 674 閱讀 6795

題目描述

輸入兩棵二叉樹a,b,判斷b是不是a的子結構。(ps:我們約定空樹不是任意乙個樹的子結構)

/*

struct treenode

};*/

class

solution

bool

hassubtree

(treenode* proot1, treenode* proot2)

};

思路:

遞迴函式dfs用於比較當前子樹與要找的樹結構是否相同,對於dfs函式,r1表示a樹上節點,r2表示b樹上節點,每次遞迴若進行到r2為nullptr時說明該處b樹已經遍歷完,返回true,r1為nullptr但r2不為nullptr說明當前遍歷子樹不同。每次遞迴返回當前兩節點值相等與否的判斷同時進行遞迴下一層左右子樹的比較,有不同值則不同,所以用&&連線。

hassubtree先判定樹a樹b為不為空,從a樹頭結點開始呼叫dfs函式,然後遞迴呼叫hassubtree深度優先搜尋左右子節點。

總結:

兩個遞迴函式dfs用於尋找首先傳入的節點作為頭結點是否與樹b相同,有一處不同則不同,用與連線。

hassubtree用於求樹b是否存在與樹a相同子樹,每次遞迴深度優先搜尋每個節點是否可以作為頭結點與樹a相同。

JZ17 樹的子結構

題目描述 輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 題解 1 我們規定,空樹不是任何乙個樹的子結構,所以當 root1 或 root2 有乙個為空時,就可以直接返回 false 2 如果當前 root1.val root2.val,那就可以去判斷它的左子...

JZ17 樹的子結構

題目描述 輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 eg 輸入,輸出 以上二叉樹會被序列化為 1 root節點1,是第一層 2,3 然後第二層是2,3 4,第三層分別是2節點的兩個孩子節點空,用 來表示,然後3節點的左孩子為4,右孩子節點為 5 第四層4...

JZ17 樹的子結構

題目描述 輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 解 對樹進行從根開始遞迴遍歷,依次遍歷左子樹,右子樹。如果根開始遍歷存在該子樹,則返回true 否則遍歷左子樹和右子樹,如果左子樹與該子樹相等,則返回true 否則遍歷右子樹,如果右子樹與該子樹相等,則...