实现二叉树的先序遍历、中序遍历、后序遍历
生活随笔
收集整理的這篇文章主要介紹了
实现二叉树的先序遍历、中序遍历、后序遍历
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、二叉樹定義
1.樹的術語:
?
樹的結點:包含一個數據元素及若干指向子樹的分支;
孩子結點:結點的子樹的根稱為該結點的孩子;
雙親結點:B 結點是A 結點的孩子,則A結點是B 結點的雙親;
兄弟結點:同一雙親的孩子結點; 堂兄結點:同一層上結點;
祖先結點: 從根到該結點的所經分支上的所有結點子孫結點:以某結點為根的子樹中任一結點都稱為該結點的子孫
結點層:根結點的層定義為1;根的孩子為第二層結點,依此類推;
樹的深度:樹中最大的結點層
結點的度:結點子樹的個數
樹的度: 樹中最大的結點度。
葉子結點:也叫終端結點,是度為 0 的結點;
分枝結點:度不為0的結點;
有序樹:子樹有序的樹
無序樹:不考慮子樹的順序
2.由樹引出二叉樹
?
二叉樹的每個結點至多只有二棵子樹(不存在度大于2的結點),二叉樹的子樹有左右之分,次序不能顛倒。二叉樹的第i層至多有2^(i-1)個結點;深度為k的二叉樹至多有2^k-1個結點。
?
二叉樹有五種基本形態:
(1)空二叉樹;
(2)只有一個根結點的二叉樹;
(3)只有左子樹;
(4)只有右子樹;
(5)完全二叉樹
盡管二叉樹與樹有許多相似之處,但二叉樹不是樹的特殊情形。(當有序樹只有一個節點時沒有左右之分,而二叉樹不是)
3.二叉樹的遍歷
對一棵二叉樹的遍歷有三種情況:先(根)序遍歷:首先訪問根,再先序遍歷左子樹,最后先序遍歷右子樹 中(根)序遍歷:首先中序遍歷左子樹,再訪問根,最后中序遍歷右子樹 后(根)序遍歷:首先后序遍歷左子樹,再后序遍歷右子樹,最后訪問根
附上代碼:
#include<stdio.h> #include<stdlib.h> typedef char TElemType; #define OK 1 #define ERROR 0 typedef int Status;typedef struct BiTNode{TElemType data;struct BiTNode* LChild,*RChild; }BiTNode,*BiTree;Status Visit(TElemType e){if(e!=' ')printf("%c ",e);return OK; }Status PreOrderTraverse(BiTree T,Status(*Visit)(TElemType e)){if(T){if(Visit(T->data)){if(PreOrderTraverse(T->LChild,Visit)){if(PreOrderTraverse(T->RChild,Visit)){return OK;}}}return ERROR;}else{return OK;} }Status InOrderTraverse(BiTree T,Status(*Visit)(TElemType e)){if(T){if(InOrderTraverse(T->LChild,Visit)){if(Visit(T->data)){if(InOrderTraverse(T->RChild,Visit)){return OK;}}}return ERROR;}else{return OK;} }Status PostOrderTraverse(BiTree T,Status(*Visit)(TElemType e)){if(T){if(PostOrderTraverse(T->LChild,Visit)){if(PostOrderTraverse(T->RChild,Visit)){if(Visit(T->data)){return OK;}}}return ERROR;}else{return OK;} }Status CreatTree(BiTree& T){TElemType ch;T=(BiTree)malloc(sizeof(BiTNode));scanf("%c",&ch);getchar();T->data=ch;if(ch==' '){T->LChild=NULL;T->RChild=NULL;return OK;}printf("輸入%c的左孩子:",ch);CreatTree(T->LChild);printf("輸入%c的右孩子:",ch);CreatTree(T->RChild); }int main(){BiTree T=NULL;printf("輸入root:");CreatTree(T);printf("\nPreOrderTraverse:");PreOrderTraverse(T,Visit);printf("\nInOrderTraverse:");InOrderTraverse(T,Visit);printf("\nPostOrderTraverse:");PostOrderTraverse(T,Visit); }遍歷的樹:
運行截圖:
轉載于:https://www.cnblogs.com/jiangpengcheng/articles/8075185.html
總結
以上是生活随笔為你收集整理的实现二叉树的先序遍历、中序遍历、后序遍历的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MPSOC之3——centos环境配置及
- 下一篇: Kncok之绑定事件