Java 檢查二叉樹是否平衡。

2021-07-03 19:20:39 字數 831 閱讀 2120

實現乙個函式,檢查二叉樹是否平衡。

二叉樹平衡的定義如下:任意乙個結點,其兩顆子樹的高度差不超過1

遞迴訪問每個整棵樹,計算每個結點子樹的高度

public class btreebalanced 

public static boolean isbalanced(treenode root)

else

} public static int getheight(treenode root)

}

但這樣做的效率不高,getheight()會被反覆呼叫計算同乙個結點的高度,時間複雜度為o(n logn)

getheight()其實不僅可以檢查高度,還能檢查樹是否平衡,只要將判斷左右子樹高度差是否大於一放進getheight()就可以了,下面用checkheight()來表示這一段**。

這樣做的好處是時間複雜度降低了,為o(n),空間複雜度為o(h),h為樹的高度

public static int checkheight(treenode root) 

int rightheight = checheight(root.right);

if ( rightheight == -1 )

int heightdiff = leftheight - rightheight;

if (math.abs(heightdiff) > 1)

else

} public static boolean isbalanced2(treenode root)

else

}

二叉樹平衡檢查

題目描述 實現乙個函式,檢查二叉樹是否平衡,平衡的定義如下,對於樹中的任意乙個結點,其兩顆子樹的高度差不超過1。給定指向樹根結點的指標treenode root,請返回乙個bool,代表這棵樹是否平衡。思路一 用遞迴來遍歷計算每個節點左右子樹的高度,最後比較差值。時間複雜度o n logn publ...

二叉樹平衡檢查

實現乙個函式,檢查二叉樹是否平衡,平衡的定義如下,對於樹中任意乙個結點,兩顆子樹的高度差不超過1。給定指向樹根結點的指標treenode root,請返回乙個bool,代表這棵樹是否平衡。樹結構自身就是遞迴定義,很多問題都可以利用遞迴巧妙地實現,對於這道題,關鍵點有兩處 求結點左右子樹高度差 遍歷樹...

二叉樹平衡檢查

題目描述 實現乙個函式,檢查二叉樹是否平衡,平衡的定義如下,對於樹中的任意乙個結點,其兩顆子樹的高度差不超過1。給定指向樹根結點的指標treenode root,請返回乙個bool,代表這棵樹是否平衡。coding utf 8 class treenode def init self,x self....