二叉树节点数据结构-练习 5 二叉树的建立 遍历
PS:今天上午,非常郁悶,有很多簡略基礎的問題搞得我有些迷茫,哎,代碼幾天不寫就忘。目前又不當COO,還是得用心記代碼哦!
????二叉樹是數據結構的最主要的內容之一,之所以引入二叉樹,是因為精良的數據結構非常有助于數據的排序,查詢等操作,也是在空間和效率上做個平衡!!
??? 二叉樹的定義:每個節點至多有倆顆子樹(即二叉樹中不存在度大于2的節點),并且,二叉樹的子樹有閣下之分,其次序不能恣意顛倒。(摘自《數據結構 c語言》嚴蔚敏 版,如有維權,可發送至:shenganbeiyang@163.com,本人將當即刪除)
?? 形如:
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????節選自:《數據結構》 嚴蔚敏 圖6.4
?
? 二叉樹的分類:滿二叉樹,完全二叉樹,一般二叉樹(暫且列舉簡略的)。
????(a)滿二叉樹,,根節點的度為1,葉節點的度為0,其余節點的度為2.
????(b)完全二叉樹:懂得上很簡略,在滿二叉樹的基礎上,去掉序號靠后的節點,注意必須從倒數第一個點算起。b 就是,而c,d 都不是。因此c,d只是一般的二叉樹。
????二叉樹的幾個主要術語: 度,深度,根節點,雙親,葉節點,子樹。
????度:每個節點可以有的子節點的個數。深度:層數;根節點:最頂層的那個點;雙親:其實是一個節點,如(a)中4和5的雙親是2;葉節點:度為0的節點;子樹:如(a),做標記的部份是1的子樹。
? 樹的相干性質:1,第i層上至多有2的(i-1)次方個節點;
?????????????????????????????? 2,深度為k的二叉樹至多有2^k-1個節點;
?????????????????????????????? 3,度為0 的節點數n0,度為2的節點數n2,則n0=n2+1;
???????????????????????????????4,主要是關于節點之間的位置關系,啰嗦一堆,其實很簡略,就不再貼出來了。
?
????樹的建立和遍歷:
????????????????????????????? 包含前序 中序? 和后序 ,其實就是元素拜訪的次序,比如如上圖 (d):前序 124536 ,? 中序:425136 , 后序: 452631。簡略畫畫就能夠了。
????代碼如下:
??????????????????????????????
每日一道理生命,是一場漫長的棋局。這盤棋沒有獵獵西風,沒有四起狼煙,只有在取舍和進退中抉擇。只有像棋中的小卒那樣,勇往直前,毫不退縮沿著溝溝坎坎的人生之路,艱難而執著的求索,前進,才會譜寫人生最壯麗的強者之歌。
/* email:shengbaiyang@163.com qq:501968942 */#include<iostream> using namespace std; struct Tnode {char value;struct Tnode* lChild;struct Tnode* rChild;}; typedef Tnode* BiTree;void InitBiTree(BiTree& T) {char inChar=getchar();//# 表示空節點,但是也要輸入,為了保證樹的完整性if(inChar=='#')T=0;else{T=(BiTree)malloc(sizeof(Tnode));if(!T) throw "Invalid Address";else{T->value=inChar;InitBiTree(T->lChild);InitBiTree(T->rChild);}}} //前序拜訪 void PreOrder(BiTree & T) {if(T){cout<<"node is: "<<T->value<<endl;PreOrder(T->lChild);PreOrder(T->rChild);}} //中虛拜訪 void InOrder(BiTree &T) {if(T){ InOrder(T->lChild);cout<<"node is : "<<T->value<<endl;InOrder(T->rChild);}} //后續拜訪 void PostOrder(BiTree &T) {if(T){ PostOrder(T->lChild);PostOrder(T->rChild);cout<<"node is : "<<T->value<<endl;}}int main() {BiTree t; cout<<"請輸入節點值:"; InitBiTree(t); cout<<"前序拜訪:"<<endl; PreOrder(t); cout<<"中序拜訪:"<<endl; InOrder(t); cout<<"后序拜訪:"<<endl; PostOrder(t);}
????
輸入:124##5##3#6
??????????????????????????????????????????????????
????可見,與之前手工推導結果一致,注意一定不要漏了 #,否則 不但輸出結果有誤,而且 不能畸形如期運行
文章結束給大家分享下程序員的一些笑話語錄: 3G普不普及現在已經不是看終端了,而是看應用,有好的,便宜實用的應用,花1000多買個能用的智能手機應該不是什么難事。反過來說,你200元拿一個智能手機,沒有好的應用,看個電影要幾十元,也是沒人用3G。
--------------------------------- 原創文章 By
二叉樹和節點
---------------------------------
轉載于:https://www.cnblogs.com/xinyuyuanm/archive/2013/05/24/3097748.html
總結
以上是生活随笔為你收集整理的二叉树节点数据结构-练习 5 二叉树的建立 遍历的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 联想笔记本怎么开bios设置密码 联想笔
- 下一篇: 元对象我所理解的设计模式(C++实现)—