判斷乙個二叉樹是另乙個二叉樹的子樹

2022-03-09 18:47:43 字數 1606 閱讀 7074

/*** 輸入兩棵二叉樹a和b,判斷b是不是a的子結構。

* 該方法是在a樹中找到乙個與b樹的根節點相等的元素的結點,

* 從這個相等的結點開始判斷樹b是不是樹a的子結構,如果找到其的乙個就返回,

* 否則直到所有的結點都找完為止。

** @param root1 樹a的根結點

* @param root2 樹b的根結點

* @return true:樹b是樹a的子結構,false:樹b是不樹a的子結構

*/

public

static

class

binarytreenode

public

static

boolean

hassubtree(binarytreenode root1, binarytreenode root2)

//只要樹b的根結點點為空就返回true

if (root2 == null)

//樹b的根結點不為空,如果樹a的根結點為空就返回false

if (root1 == null)

//記錄匹配結果

boolean result = false;

//如果結點的值相等就,呼叫匹配方法

if (root1.value ==root2.value)

//如果匹配就直接返回結果

if(result)

//如果不匹配就找樹a的左子結點和右子結點進行判斷

return hassubtree(root1.left, root2) ||hassubtree(root1.right, root2);

}/*** 從樹a根結點root1和樹b根結點root2開始,乙個乙個元素進行判斷,判斷b是不是a的子結構**

@param

root1 樹a開始匹配的根結點

* @param

root2 樹b開始匹配的根結點

* @return

樹b是樹a的子結構,false:樹b是不樹a的子結構

*/public

static

boolean

match(binarytreenode root1, binarytreenode root2)

//只要樹b的根結點點為空就返回true

if (root2 == null

)

//樹b的根結點不為空,如果樹a的根結點為空就返回false

if (root1 == null)

//如果兩個結點的值相等,則分別判斷其左子結點和右子結點

if (root1.value ==root2.value)

//結點值不相等返回false

如何判斷乙個二叉樹是否為另乙個二叉樹的子樹

1.遞迴的方式 struct treenode class solution bool getresult treenode p1,treenode p2 遞迴的過程如上面所示,需要注意的是這是兩個不同的遞迴過程!2.序列化然後利用kmp演算法進行模式串的匹配 kmp演算法的時間複雜度為o m n ...

二叉樹 判斷乙個樹是否是平衡二叉樹

題目 給定乙個二叉樹,判斷其是否是平衡二叉樹。方法一 bool isbalancedtree treenode root bool ltree isbalancedtree root left bool rtree isbalancedtree root right if ltree rtree r...

判斷乙個二叉樹是不是平衡二叉樹

題目 輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹。分析 首先要明白平衡二叉樹的概念 平衡二叉樹必須滿足兩個條件 1 左右子樹的高度差不能大於1 2 每個根節點下面的左右子樹也必須滿足平衡二叉樹的性質。對於本題,我們首先要知道如何去求一棵二叉樹的深度,接下來我們只需要判斷每個節點是否滿足平衡二叉...