二叉树先序,中序,后序,层次遍历(数据结构)
生活随笔
收集整理的這篇文章主要介紹了
二叉树先序,中序,后序,层次遍历(数据结构)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
先序遍歷
先序遍歷可以想象為,一個小人從一棵二叉樹的根節點為起點,沿著二叉樹的外沿,逆時針走一圈回到根節點,路上遇到的元素順序,就是先序遍歷的結果
先序遍歷的結果為:A B D H I E J C F K G
中序遍歷
中序遍歷可以看成,二叉樹每個節點,垂直方向投影下來(可以理解為每個節點從最左邊開始垂直掉到地上),然后從左往右數,得出的結果便是中序遍歷的結果
中序遍歷的結果是:H D I B E J A F K C G
后序遍歷
后序遍歷就像是剪葡萄,我們要把一串葡萄剪成一顆一顆的。就是圍著樹的外圍繞一圈,如果發現一剪刀就能剪下的葡萄(必須是一顆葡萄)(也就是葡萄要一個一個掉下來,不能一口氣掉超過1個這樣),就把它剪下來,組成的就是后序遍歷了
后序遍歷的結果是:H I D J E B K F G C A
層次遍歷
層次遍歷就是從根節點開始,一層一層,從上到下,每層從左到右,依次寫值就可以
層次遍歷的結果是:A B C D E F G H I J K
解釋跑外圈的意思:
繞著外圍跑一整圈的真正含義是:遍歷所有節點時,都先往左孩子走,再往右孩子走口訣:
先序遍歷:先根,再左,再右
中序遍歷:先左,再根,再右
后序遍歷:先左,再右,再根
(這里的根,指的是每個分叉子樹的根節點,并不只是最開始頭頂的根節點,需要靈活思考理解)
代碼展示:
#include<stdio.h> #include<stdlib.h>typrdef struct Tree{int data;//存放數據域 struct Tree *lchild;//遍歷左子樹指針 struct Tree *rchild;//遍歷右子樹指針 }Tree,*BitTree;BitTree CreateLink() {int data;int temp;BitTree T;scanf("%d",&data);//輸入數據 temp=getchar();//吸收空格if(data==-1){return NULL;//輸入-1代表此節點下子樹不存數據,也就是不繼續遞歸創建 }else{T=(BitTree)malloc(sizeof(Tree));//分配內存空間 T->data=data;//把當前輸入的數據存入當前節點指針的數據域中 printf("請輸入%d的左子樹:",data);T->lchild=CreateLink();//開始遞歸創建左子樹 printf("請輸入%d的右子樹:",data);T->rchild=CreateLink();//開始到上一級節點的右邊遞歸創建左右子樹 return T;//返回根節點 } }//先序遍歷 void ShowXianXu(BitTree T)//先序遍歷二叉樹 {if(T==NULL) return;//遞歸中遇到NULL,返回上一層節點 printf("%d ",T->data);ShowXianXu(T->lchild);//遞歸遍歷左子樹 ShowXianXu(T->rchild);//遞歸遍歷右子樹 }//中序遍歷 void ShowZhongXu(BitTree T) {if(T==NULL) return;//遞歸中遇到NULL,返回上一層節點 ShowZhongXu(T->lchild);//遞歸遍歷左子樹printf("%d ",T->data);ShowZhongXu(T->rchild);//遞歸遍歷右子樹 }//后序遍歷 void ShowHouXu(BitTree T) {if(T==NULL) return;//遞歸中遇到NULL,返回上一層節點ShowHouXu(T->lchild);//遞歸遍歷左子樹 ShowHouXu(T->rchild);//遞歸遍歷右子樹 printf("%d ",T->data); }int main() {BitTree S;printf("請輸入第一個節點的數據:\n");S = CreateLink();//接受創建二叉樹完成的根節點 printf("先序遍歷結果: \n");ShowXianXu(S);//先序遍歷二叉樹 printf("\n中序遍歷結果: \n");ShowZhongXu(S);//中序遍歷二叉樹 printf("\n后序遍歷結果: \n");ShowHouXu(S);//后序遍歷二叉樹 return 0; }樹結點定義:
typedef struct TNode *Position; typedef Position BinTree;//二叉樹類型 struct TNode{ElementType Data;BinTree Left;BinTree Right; };先序遍歷:
- 先訪問根節點
- 先序遍歷其左子樹
- 先序遍歷其右子樹
中序遍歷:
- 先序遍歷其左子樹
- 先訪問根節點
- 先序遍歷其右子樹
后序遍歷:
- 先序遍歷其左子樹
- 先序遍歷其右子樹
- 先訪問根節點
總結
以上是生活随笔為你收集整理的二叉树先序,中序,后序,层次遍历(数据结构)的全部內容,希望文章能夠幫你解決所遇到的問題。