日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实现二叉树的先序遍历、中序遍历、后序遍历

發布時間:2025/7/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实现二叉树的先序遍历、中序遍历、后序遍历 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、二叉樹定義

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

總結

以上是生活随笔為你收集整理的实现二叉树的先序遍历、中序遍历、后序遍历的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。