生活随笔
收集整理的這篇文章主要介紹了
[数据结构]二叉树
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
(1)二叉樹的概念?
二叉樹(Binary Tree)是個有限元素的集合,該集合或者為空、或者由一個稱為根(root)的元素及兩個不相交的、被分別稱為左子樹和右子樹的二叉樹組成。當集合為空時,稱該二叉樹為空二叉樹。
滿二叉樹:?在一棵二叉樹中,如果所有分支結點都存在左子樹和右子樹,并且所有葉子結點都在同一層上,這樣的一棵二叉樹稱作滿二叉樹。
完全二叉樹:一棵深度為k的有n個結點的二叉樹,對樹中的結點按從上至下、從左到右的順序進行編號,如果編號為i(1≤i≤n)的結點與滿二叉樹中編號為i的結點在二叉樹中的位置相同,則這棵二叉樹稱為完全二叉樹
(2)二叉樹的基本操作與存儲
?二叉樹的二叉鏈表存儲表示可描述為
[cpp]?view plaincopy
typedef?struct?BiTNode{??elemtype?data;??struct?BiTNode?*lchild,rchild;??}BiTNode,*BiTree;??
建立一個二叉樹,使其只有頭結點
[cpp]?view plaincopy
int?Initiate(BiTree?*bt)??{??????if((bt=(BiTNode?*)malloc(sizeof(BiTNode))==NULL)??????????return?0;??????bt->lchild=NULL;??????bt->rchild=NULL;??????return?1;??}??
(3)二叉樹的遍歷
二叉樹的遍歷是指按照某種順序訪問二叉樹中的每個結點,使每個結點被訪問一次且僅被訪問一次。
先序遍歷:
(1)訪問根結點;
(2)先序遍歷根結點的左子樹;
(3)先序遍歷根結點的右子樹。
??? 先序遍歷二叉樹的遞歸算法如下:
[cpp]?view plaincopy
void?PreOrder(BiTree?bt)??{??if?(bt==NULL)?return;???????Visite(bt->data);?????????PreOrder(bt->lchild);?????PreOrder(bt->rchild);???}?? ?
中序遍歷:先左子樹,再根,再右子樹
后序遍歷:先遍歷樹左子樹,再右子樹,最后根
先序遍歷的非遞歸實現
可以利用棧的后進先出的特點實現:
[cpp]?view plaincopy
void?NRPreOrder(BiTree?bt)????{??BiTree?stack[MAXNODE],p;????int?top;????if?(bt==NULL)?return;????top=0;????p=bt;????while(!(p==NULL&&top==0))???????{?while(p!=NULL)????????????{?Visite(p->data);????????????????if?(top<MAXNODE-1)???????????????{?stack[top]=p;?????????????????top++;????????????????}??????????????else?{?printf(“棧溢出”);?????????????????????return;????????????????????}??????????????p=p->lchild;????????????????????}????????????if?(top<=0)?return;???????????????else{?top--;??????????????????p=stack[top];????????????????????????????p=p->rchild;????????????????????????????}????????}??}??
數據結構—二叉樹
轉載于:https://www.cnblogs.com/zhiliao112/p/4232215.html
總結
以上是生活随笔為你收集整理的[数据结构]二叉树的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。