C 二叉樹平衡檢查

2021-09-25 14:37:42 字數 2119 閱讀 5005

/**

關於二叉樹與圖

1.從無到有實現二叉樹和圖

2.在二叉樹和圖中檢索/查詢target value

二叉搜尋樹:binary search tree

所要滿足的條件:對於二叉搜尋樹中任意乙個節點

它的左子樹中的所有數值都比當前節點的關鍵碼小

它的右子樹中的所有節點的關鍵碼都比當前節點的關鍵碼大

二叉搜尋樹的結構在一定程度上能夠提高搜尋效率

平衡二叉樹是指:

對於二叉樹中的任意乙個節點,

節點的左子樹的高度與右子樹的高度之差不會超過1

二叉樹的層數:

根節點的層數為1,從根節點到葉子結點層數依次增加

二叉樹的高度:

葉子節點的高度為1,從葉子節點到根節點高度依次增加,根節點的高度最大

二叉樹的深度:

葉子節點的深度指的是從根節點到當前葉子節點所經過的路徑長度

二叉樹的遍歷:

熟練實現二叉樹的中序遍歷,先序遍歷和後序遍歷

尤其是二叉樹的中序遍歷:先中序遍歷左子樹,再訪問根節點,最後中序遍歷右子樹

二叉樹遍歷的遞迴實現和迭代實現(尾遞迴很容易改寫成迭代形式)

圖的遍歷

圖的深度優先搜尋(dfs)和廣度優先搜尋(bfs)

二叉樹的前序遍歷、中序遍歷和後序遍歷的過程就是一種深度優先搜尋

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

平衡的定義如下,對於樹中的任意乙個結點,其兩顆子樹的高度差不超過1。

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

演算法1:

實現輔助函式 getheight 以獲取層序遍歷意義下每個節點的高度

對於二叉樹中的任何乙個節點,判斷其左子樹和右子樹的高度之差

是否大於1,如果大於1,則立即返回說明該二叉樹不是平衡二叉樹

但是訪問二叉樹中的每個節點時,都要遞迴得到節點的高度,時間開銷大

演算法2:

構造checkheight輔助函式,如果輸入的節點的左右子樹的高度之差大於1,

則直接返回-1表明該二叉樹不是平衡二叉樹,否則返回當前節點的高度,

以供之後計算它的父代節點的高度做準備

**/#include#include#includeusing namespace std;

struct treenode

};class balance

if(root->left==null and root->right==null)

else if(root->left==null)

else if(root->right==null)

else

}bool isbalance(treenode* root)

if(root->left==null and root->right==null)

vectorhelper_queue;// 構造輔助佇列以實現對二叉樹的層序遍歷

helper_queue.push_back(root);

treenode *temp;

int left_depth=0;

int right_depth=0;

while(helper_queue.size()>0)

else

if(temp->right!=null)}}

return true;

}};int main()

// 演算法2

#include#include#includeusing namespace std;

struct treenode

};class balance

if(root->left==null and root->right==null)

else

int right_height=this->checkheight(root->right);

if(right_height==-1)

if(left_height-right_height>1 or left_height-right_height<-1)

else}}

bool isbalance(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....