二叉樹是資料結構中比較有意思的部分
二叉樹有兩種儲存形式
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...