如何判斷二叉樹是平衡 搜尋 完全?

2021-10-08 12:35:13 字數 1622 閱讀 9519

思路:

實現乙個遞迴函式判斷每乙個節點的左右子樹的高度差是否大於1,若大於1,直接將狀態值設定為false,否則將當前子樹的長度設定為較大的子樹高度,並返回。

**實現

public

static

class

node

}public

static

boolean

isbalance

(node head)

public

static

intgetheight

(node head,

int level,

boolean

res)

//遞迴呼叫,返回左子樹高度

int lh =

getheight

(head.left, level +

1, res)

;//一旦狀態為false,不用判斷別的了if(

!res[0]

)//遞迴呼叫,返回右子樹高度

int rh =

getheight

(head.right, level +

1, res);if

(!res[0]

)//核心,一旦有差值大於1,遞迴函式一路false,最後直接返回

if(math.

abs(lh - rh)

>1)

return math.

max(lh, rh)

;}

思路:

中序遍曆法(簡單粗暴):因為二叉樹搜尋樹是要滿足中序遍歷得到的值構成的序列一定是公升序的,因此在中序遍歷的時候實時檢查當前節點的值是否大於前乙個中序遍歷到的節點的值即可。

**實現

public

boolean

isvalidbst

(treenode root)

else

else

root = root.right;}}

}return

true

;}

思路:

根據完全二叉樹的原理:

1.若乙個二叉樹有右節點,沒有左節點,必然不是完全二叉樹;

2.若滿足上面條件,如果出現兩節點全無或者有左沒右,則接下來遇到的節點都必須是葉節點

3.逐層遍歷,利用佇列,先左再右

**實現

public

static

boolean

iscbt

(node head)

queue

queue =

newlinkedlist

();//第二階段開啟的標誌

boolean leaf =

false

; node l = null;

node r = null;

queue.

offer

(head)

;while

(!queue.

isempty()

)if(l != null)

if(r != null)

else

}return

true

;}

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

二叉樹的節點定義為 public class treenode 二叉樹的深度 根節點到葉節點的最長路徑長度 平衡二叉樹 二叉樹中任一節點的左右子樹的深度相差不超過1 遞迴的方法 如下 public boolean isbalanced treenode root intleft getheight ...

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

平衡二叉搜尋樹 balanced binary tree 具有以下性質 它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。思路 如果一顆二叉樹的所有子樹都是平衡二叉樹,它一定是平衡二叉樹。include using namespace std typedef...

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

平衡樹 balance tree,bt 指的是,任意節點的子樹的高度差都小於等於1。力扣 110也有該題,可以用來驗證。如果二叉樹為空,返回true。計算出左子樹和右子樹的最大深度。如果左右子樹的最大深度的差值小於2,並且左 右子樹都是平衡二叉樹,則該二叉樹是平衡二叉樹。判斷二叉樹是否是平衡二叉樹 ...