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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

二叉树及先序,中序,后序遍历

發布時間:2024/8/26 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 二叉树及先序,中序,后序遍历 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、什么是二叉樹

每個結點至多只有兩棵子樹,并且,二叉樹有左右之分不能隨便顛倒位置。

二、二叉樹的存儲形式

1、順序存儲結構

用一組地址連續的存儲單元以此自上而下、自左從右的存儲二叉樹的結點元素。這種結構便于遍歷二叉樹查找元素,但是會浪費大量內存空間。

2、鏈式存儲結構

每個結點有指向左右子樹的指針,本身的數據內容,還可以加上指向雙親的指針。這樣相對于順序存儲結構能夠節省內存空間。

三、二叉樹結構體

typedef struct Node{
    int data;
    Node *lchild;
    Node *rchild;
}Node;

四、先序遍歷

1、先訪問根節點

2、先序遍歷左子樹

3、先序遍歷右子樹

代碼(遞歸):

void BL(tree* T){
printf("%d",T->data); if(T->lchild!=NULL) BL(T->lchild); if(T->rchild!=NULL) BL(T->rchild); }

五、中序遍歷

1、中序遍歷左子樹

2、訪問根節點

3、中序遍歷右子樹

代碼(遞歸):

void BL(tree* T)
{
if(T->lchild!=NULL)
BL(T->lchild);
printf("%d",T->data); if(T->rchild!=NULL) BL(T->rchild); }

六、后序遍歷

1、后序遍歷左子樹

2、后序遍歷右子樹

3、訪問根節點

代碼(遞歸):

void BL(tree* T)
{
if(T->lchild!=NULL)
BL(T->lchild);
if(T->rchild!=NULL)
BL(T->rchild);
printf("%d",T->data);
}

七、例子

上圖的先序:-+a*b-cd/ef

中序:a+b*c-d-e/f

后序:abcd-*+ef/-

對于三種遍歷,可以這樣去想,就比較容易理解了,從根開始一直往左子樹遍歷,到底后,然后退回一個點,遍歷右子樹的所有左子樹,如此循環,如果是先序,就在第一次訪問節點的時候進行處理,如果是中序就是第二次訪問節點的時候處理,如果是后序就第三次訪問的時候進行處理。只要記住結點的三次訪問分別是干什么的,就可以很好的理解三次遍歷過程,只有熟練掌握了三種遍歷,才能用算法去實現樹的各種操作。

總結

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

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