劍指offer 17 樹的子結構

2022-07-11 07:03:10 字數 1484 閱讀 6403

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

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

例如:給定的樹 a:

給定的樹 b:

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

示例 1:

輸入:a = [1,2,3], b = [3,1]

輸出:false

示例 2:

輸入:a = [3,4,5,1,2], b = [4,1]

輸出:true

限制:0 <= 節點個數 <= 10000

/**

* definition for a binary tree node.

* public class treenode

* }*/class solution

//a、b結點相等就開始比較子樹是否相等

if(a.val==b.val&&helper(a.left,b.left)&&helper(a.right,b.right))

//掃瞄a直到找到和b相等的點

return issubstructure(a.left,b)||issubstructure(a.right,b);

}public boolean helper(treenode a,treenode b)

return false;}}

因為要遍歷二叉樹,用深搜的遞迴、非遞迴,或者廣搜都是可以的

但是用廣蒐會超時

/**

* definition for a binary tree node.

* public class treenode

* }*/class solution

queuelist=new linkedlist<>();

list.offer(a);

while(!list.isempty())

if(node.left!=null)

if(node.right!=null)

}return false;

}public boolean bfs(treenode node,treenode b)

if(nodeb==null)

if(nodea.val!=nodeb.val)

queuea.offer(node.left);

queuea.offer(node.right);

queueb.offer(b.left);

queueb.offer(b.right);

}return 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...