專為新手入門二叉樹(C實現)

2021-08-30 04:37:09 字數 2001 閱讀 6556

本篇部落格主要涉及二叉樹的基本操作,建立,三種遍歷,求節點等(c寫法)。

二叉樹作為資料結構的難點,想必讓很多人望而生畏,各種複雜的**和演算法實在讓人頭大,博主也是近期剛接觸二叉樹,對於二叉樹的**也不是很深刻,所以有紕漏還請體諒。

struct btnode;  

3.二叉樹的建立

知道了二叉樹的儲存結構,怎麼去建立一棵二叉樹呢,遞迴方法是最為便捷和最好理解的。

void create(btnode* &t)

4.二叉樹的三種遍歷

二叉樹的遍歷包括先序、中序、後序(三種方法本質一樣,在這只詳細介紹先序遍歷)

先序遍歷的規則是先visit根節點,再vistit該根節點的左孩子,再vistit該根節點的右孩子,如下圖二叉樹的先序遍歷輸出為:

f>c>a>d>b>e>h>g>m

思想就是

**實現為

void prior_order1(btnode* t)     //遞迴先序遍歷二叉樹

}

中序和後序只需要把(coutlchild)+1;

rightlen=depth(t->rchild)+1;

} if(leftlen>rightlen)

return leftlen;

return rightlen; //就是比較左右子樹的深度,選擇較大的,

}6.求葉子結點個數

void leaf(btnode* t,int &count)//求葉子節點個數

}

其實掌握了這些方法,二叉樹的其他操作的思想也是差不多的。

最後附上全部**

#include#includeusing namespace std;

struct btnode;

extern int level=0;

extern int count=0;

int depth(btnode* );

void create(btnode* &t)

void prior_order1(btnode* t)//遞迴先序遍歷二叉樹

}void mid_order(btnode* t)//遞迴中序遍歷二叉樹

}void behind_bt(btnode*t)//後續遍歷二叉樹

}void prior_order(btnode* t)//先序輸出二叉樹 ,並且同時輸出每個節點對應的位數

void numbers_of_node(btnode* t,int &count)//計算二叉樹中結點個數,賦值給count

}int depth(btnode* t)//求二叉樹的深度,規定根節點所在層次為0層

if(leftlen>rightlen)

return leftlen;

return rightlen;

}void leaf(btnode* t,int &count)//求葉子節點個數

} int main()

{ btnode *t=new btnode;

t=null;

int num1,node;

num1=node=0;

create(t);

leaf(t,num1);//num1儲存葉子結點個數

numbers_of_node(t,node);//node儲存結點個數

cout<

prior_order1(t); cout<

cout<

mid_order(t); cout<

cout<

behind_bt(t); cout<

cout<

相信只要努力了肯定就有所收穫的,大家看不懂**的時候就照著打幾遍,不懂也能記下來了,久而久之慢慢就掌握了。

新手入門 二叉樹

滿二叉樹 每個結點都滿 完全二叉樹 具有滿二叉樹的部分性質,滿足至少有左邊的結點 某一層的結點數 nlevel 1 n表示n叉樹 某一深度結點數 nh 1 一般二叉樹性質 1 在非空二叉樹的i層上,至多有2i 1個節點 i 1 通過歸納 證。2 在深度為k的二叉樹上最多有2k 1個結點 k 1 通過...

C 實現二叉樹

其中的 linkstack.h 和 linkqueue 分別在 以下兩篇博文裡 linkstack linkqueue include include linkstack.h include linkqueue.h using namespace std 定義節點 templatestruct no...

二叉樹C 實現

最近整理原來的一些 腦子有點不好使,還是記下來吧。binary tree.h,遍歷包含了遞迴和非遞迴兩種,層次遍歷 ifndef binary tree h define binary tree h templatestruct binode templateclass bitree endif b...