題目描述
輸入兩棵二叉樹a,b,判斷b是不是a的子結構。(ps:我們約定空樹不是任意乙個樹的子結構)
題解:遞迴
1public
static
boolean
hassubtree(treenode root1,treenode root2)
5return tree1hastree2(root1,root2)||hassubtree(root1.left,root2)||hassubtree(root1.right,root2);6}
7public
static
boolean
tree1hastree2(treenode root1,treenode root2)
11if(root2==null)14
return root1.val==root2.val&&tree1hastree2(root1.left,root2.left)
15 &&tree1hastree2(root1.right,root2.right);
16 }
初始化樹:
1public
static
class
treenode 8}
9private
static listnodelist = null;10
public
static treenode createbintree(int
array)
16//
對前lastparentindex-1個父節點按照父節點與孩子節點的數字關係建立二叉樹
17for (int parentindex = 0; parentindex < array.length / 2 - 1; parentindex++)
23//
最後乙個父節點:因為最後乙個父節點可能沒有右孩子,所以單獨拿出來處理
24int lastparentindex = array.length / 2 - 1;
25//
左孩子26 nodelist.get(lastparentindex).left = nodelist.get(lastparentindex * 2 + 1);
27//
右孩子,如果陣列的長度為奇數才建立右孩子
28if (array.length % 2 == 1)
31return nodelist.get(0);
32 }
測試:
1public
static
void
main(string args) ;
3int tree2=;
4 treenode root1 =createbintree(tree1);
5 treenode root2 =createbintree(tree2);
6boolean hassubtree =hassubtree(root1, root2);
7system.out.println(hassubtree);8}
9 輸出:true
劍指offer 17 樹的子結構
輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 這是典型二叉樹遞迴問題。倆顆樹都不為空時,如果根節點相同,那麼判斷root2是不是root1的子樹,如果不是,那麼判斷root2是不是root1左子樹的子樹,如果還不是,那麼判斷root2是不是root1右子樹的...
劍指Offer (17)樹的子結構
題目描述 輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 實現如下 分兩步 第一步 尋找與b樹根節點val相等的a樹節點。如果找到進入第二步,否則繼續尋找,直到找完a樹 第二步 以找的節點作為a樹子樹的根節點,同時遍歷兩棵樹,判斷是否所有節點都相同 特殊情況 ...
劍指offer(17)樹的子結構
19.1.11 題目描述 輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 思修很簡單 遍歷a樹,每個a節點與b對比,對比函式為solution。如下 function treenode x function hassubtree proot1,proot2 r...