劍指 Offer 26 樹的子結構

2021-10-08 12:53:56 字數 1118 閱讀 6021

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

b是a的子結構, 即 a中有出現和b相同的結構和節點值。

例如:給定的樹 a:

3/ \

4   5

/ \1   2

給定的樹 b:4 /

1返回 true,因為 b 與 a 的乙個子樹擁有相同的結構和節點值。

/**

* definition for a binary tree node.

* public class treenode

* }*/class solution

private boolean iss(treenode a, treenode b)

}

分析:若b是a的子結構,則a中必存在節點等於b的根節點。因此判斷b是否為a的子結構需要兩步:

1、遍歷a的每乙個節點node,

2、判斷以該node為根節點的子樹是否包含b。

演算法流程:

1、iss(a,b):判斷以a節點為根節點的子樹是否包含b樹

終止條件:

b==null說明,b樹已經匹配完成,a節點為起點的樹包含b樹

a==null && b!=null說明,b樹還未匹配完,而a已經為null,a節點為起點的樹不包含b樹

a.val!=b.val說明,a節點的值不等於b節點的值,匹配不成功

返回值:

判斷 a 和 b的左子節點是否相等,即 iss(a.left, b.left) ;

判斷 a和 b的右子節點是否相等,即 iss(a.right, b.right) ;

2、issubstructure(a,b):遍歷每個節點

終止條件:

當 樹 a為空 或 樹 b為空 時,直接返回 false ;

返回值:

若樹 b是樹 a的子結構,則必滿足以下三種情況之一,因此用或 || 連線;

以 節點 a 為根節點的子樹 包含樹 b ,對應 iss(a, b);

樹 b是 樹 a 左子樹 的子結構,對應 issubstructure(a.left, b);

樹 b 是 樹 a 右子樹 的子結構,對應 issubstructure(a.right, b);

劍指offer26 樹的子結構

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

劍指 Offer 26 樹的子結構

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

劍指 Offer 26 樹的子結構

題目描述 輸入兩棵二叉樹a和b,判斷b是不是a的子結構。約定空樹不是任意乙個樹的子結構 b是a的子結構,即 a中有出現和b相同的結構和節點值。示例1 輸入 a 1,2,3 b 3,1 輸出 false 示例2 輸入 a 3,4,5,1,2 b 4,1 輸出 true 解題思路 要判斷二叉樹a中是否存...