判斷二叉平衡樹的三種方法

2021-07-16 10:24:15 字數 1058 閱讀 2123

實現乙個函式,檢查二叉樹是否平衡。在這個問題中,平衡樹的定義如下,任意乙個節點,其兩顆子樹的高度差不超過1。

判斷平衡二叉樹是乙個常見題目,一般來說,我們都是求出左右子樹的高度,根據定義判斷其差。下面給出三種實現方法,大家可以對比其優劣。

/*

題目描述

實現乙個函式,檢查二叉樹是否平衡,平衡的定義如下,對於樹中的任意乙個結點,

其兩顆子樹的高度差不超過1。

給定指向樹根結點的指標treenode* root,請返回乙個bool,代表這棵樹是否平衡。

*/#include #include #include using namespace std;

struct treenode

};class balance

//求二叉樹高度

int height(treenode *root)

//ekse

} /*方法二:改進過的演算法,空間複雜度為o(h) 時間複雜度為o(n)*/

bool isbalance2(treenode *root)

/*檢測二叉樹是否平衡,若不平衡返回-1,若平衡返回當前樹的高度*/

int checkheight(treenode *root) }

/*方法三:優化演算法t(n)=o(n) s(n)=o(logn)*/

bool isbalance3(treenode *root, int &height)

int leftheight = 0, rightheight = 0;

bool leftret = isbalance3(root->left, leftheight);

bool rightret = isbalance3(root->right, rightheight);

height = max(leftheight, rightheight) + 1;

if (abs(leftheight - rightheight) > 1)

return false;

return leftret && rightret;

}};

判斷二叉查詢樹的三種方法

實現乙個函式,判斷一棵二叉樹是否為二叉查詢樹。我們知道一棵二叉查詢樹的中序遍歷序列是有序的,所以只需求出中序遍歷結果,再依次判斷該序列是否有序即可。但是上述方法需要額外執行緒空間儲存遍歷結果,在此可以省去該空間開銷,只需乙個變數儲存訪問當前節點時上一節點的值即可。本文還提供了另一種方法,基於left...

二叉樹的三種遍歷方法

定義二叉樹 鏈式儲存 struct binarytreenode 順序儲存 struct binarytreenode 遞迴實現 先序遍歷 int preordertreewalk binarytreenode pnode 中序遍歷 int inordertreewalk binarytreenod...

二叉樹的三種遞迴方法

今天學習了二叉樹的知識學習了三種遍歷二叉樹的方法,雖然不知道後面兩種有什麼卵用,但還是講解一下 第一種 先序遍歷 1 先訪問其節點本身 2 訪問其左邊的子節點 3 再訪問其右邊的子節點。這種遍歷二叉樹的方法其實就是深搜,先訪問左邊一整條線的節點,就相當於搜尋迷宮時朝乙個方向一直走,直到不能走時再換乙...