二叉樹中用到的基本演算法(葉子,度,遍歷)

2021-09-19 21:10:13 字數 1811 閱讀 3519

二叉樹是資料結構中比較有意思的部分

二叉樹有兩種儲存形式

1: 線性表

2:指標

其實鍊錶是很重要的,二叉樹就可以看為多條鍊錶組合在一塊。

在這裡主要是指標來實現的。 這裡基本的演算法都用到了遞迴實現

那在二叉樹 中重要的演算法如下:

a:建立乙個二叉樹(採用前序,活著中序,活著後序)

b:遍歷二叉樹(前序,中序,後序)

c:葉子結點的個數

d:樹的高度

e:度為一的節點數

f:度為二的節點數

g:有分枝的節點數

h:查詢某個節點

可能剛開始不能理解遞迴,找乙個二叉樹的影象,根據程式走一遍就基本能理解。

那這個二叉樹的前序遍歷為。fcadbehgm

中序遍歷為:acbdfehmg

後序遍歷為:abdchmgef

//

// main.cpp

// 二叉樹,中序遍歷

//// created by 劉小成 on 2018/10/20.

//includeusing namespace std;

typedef struct bitnodebitnode;

class tree

void creattree()

void ordertree()

}void tree::orderbitnode(bitnode *t)

}void tree::inorderbitnode(bitnode *t)

}int tree::countleaf(bitnode *t)

}int tree::heightbitnodetree(bitnode *t)

}int tree::onebitnode(bitnode *t)

else}}

int tree::twobitnode(bitnode *t)

else}}

int tree:: branchbitnode(bitnode *t)

else}}

int main(int argc, const char * ar**)

在私有方法裡面建立遞迴函式,在公有函式裡面呼叫遞迴函式。這樣做的目的是不會產生多餘的變數,變數連線緊密。

在建立遞迴函式的時候要考慮好函式的出口,好讓函式可以返回。然後就要考慮遞迴函式裡面遞迴的內容,將問題細小化。比如在統計葉子結點有多少個,

那函式的出口就是 這個節點是不是為空,若是空 ,就返回,

函式的遞迴內容就是。 對乙個節點來說,先統計乙個它的左子樹的節點,在統計一下右子樹的節點, 如果兩邊都是0,那他就是葉子結點,那就葉子結點,返回1,否則就不是葉子結點, 那就返回這個樹的左邊葉子結點數+右邊的節點數。

那在對於樹的高度函式來講

在建立二叉樹的時候要規定乙個輸入值,當這個值輸入的時候那他就null。在上面中 作者規定的是「.」,

二叉的這些演算法中對於遞迴的要求比較高。

那對於二叉樹的度為一的節點的遞迴函式思想如下:

那度為二的節點其實和上面的思路是一樣的。還有有分枝的節點。

二叉樹樹的基本演算法

includeusing namespace std define ok 1 define error 0 define overflow 2 typedef char elemtype const int maxlength 30 結點個數不超過30個 typedef struct bitreen...

二叉樹的基本演算法

二叉樹的遍歷 求二叉樹的深度 多叉樹轉二叉樹 輸入乙個二叉樹的先序串,輸出以括號形式表示的而叉樹。如果結點的子樹為空,先序串的對應位置為空格符。第1行 先序串 結點數 26,以單個大寫字母表示 第1行 二叉樹的括號形式ab c da b c d include include char s 100 ...

二叉樹求葉子數

二叉樹求葉子數的數學模型是 三種情況 第一種,當a null時,函式值為0 第二種,當左子樹和右子樹都為空時,返回1 第三種,排除以上所有的就是兩邊子樹葉子加起來,返回乙個和 include includetypedef struct bnode btree btree insert node bt...