題目描述:輸入兩棵二叉樹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
中是否存在和二叉樹b
結構一樣的子樹,可以分為兩步:(1)在二叉樹a
中找到和樹b
的根節點的值一樣的節點r
;(2)判斷以r
為根節點的子樹是不是包含和樹b
一樣的結構。
第一步的實現比較簡單,其實就是前序遍歷二叉樹,將二叉樹a
的節點的值和二叉樹b
的根節點的值進行比較。第二步可以基於遞迴實現:如果節點r
的值和樹b
的根節點的值不一樣,則以r
為根節點的子樹和樹b
的結構肯定不一樣,如果值相等的話則遞迴地比較各自的左右節點的值是否一樣。這裡注意可能會出現空指標異常的情況。
實現**:
public
boolean
issubstructure
(treenode a, treenode b)
return flag;
}public
boolean
doestreeahastreeb
(treenode a, treenode 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相同的結構和節點值。例如 給定的樹 a 3 4 5 1 2 給定的樹 b 4 1返回 true,因為 b 與 a 的乙個子樹擁有相同的結構和節點值。definition for a bin...