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