本篇部落格主要涉及二叉樹的基本操作,建立,三種遍歷,求節點等(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...