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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

简述数据字典的结构及其作用_数据结构——树基本概念及其遍历

發布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简述数据字典的结构及其作用_数据结构——树基本概念及其遍历 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.概念

樹結構是一種描述非線性層次關系的數據結構

在一個數結構中,有且僅有一個結點沒有直接前驅,這個結點就是樹的結點。

除根結點外,其余每個結點有且僅有一個直接前驅。

每個結點可以有任意多個直接后繼。

2.樹的術語

根:有且僅有一個無直接前驅結點的結點

結點的度:結點擁有的子數的數量叫做結點的度

樹的度:樹內結點的度的最大值

葉子:終端結點

結點的層:從根算起。根為第一層,往下則+1層

樹的深度:樹的最大層數

森林:去掉根結點所得子數的個數

這里給大家分享一份二叉樹與紅黑樹電子書籍及視頻學習,需要的朋友可以加qun720209036獲取

3.二叉樹

什么是二叉樹

結點最多只有兩個兒子,叫做二叉樹

二叉樹的重要性質

第i層上最多有2^(i-1)個結點

深度為k的的二叉樹最多有2^k - 1個結點

N0表示葉結點個數,N2表示度為2的非葉結點個數,那么N0=N2+1

二叉數的存儲

順序存儲:一般通過結構數組進行存儲

鏈式存儲:存儲結構包含結點元素及分別指向左子樹和右子樹的引用

//鏈式存儲
typedef struct treeNode
{
void* NodeData; // 元素數據
struct treeNode* LtreeNode; //左子樹結點引用
struct treeNode* RtreeNode; // 右子樹結點引用
}TreeNode_T;

二叉樹的遍歷

先序遍歷:1.訪問根結點 2.訪問椰子樹 3.訪問右子樹

中序遍歷:1.訪問左子樹 2.訪問根結點 3.訪問右子樹

后序遍歷:1.訪問左子樹 2.訪問右子樹 3.訪問根結點

層次遍歷:從根結點開始,向下一層一層訪問,每層從左到右訪問每個結點

如何具體實現?首先需要分析,二叉樹遍歷的核心問題,需要存儲結構保存暫時不訪問的結點,可以借助其他數據結構完成,如隊列、堆棧

二叉樹的先、中、后序遞歸遍歷

核心思想:使用堆棧,先進后出

二叉樹的層次遍歷

核心思想:使用隊列,先進先出,首先根結點入隊,當結點出隊,訪問該結點、將其左右兒子入隊

偽代碼實現如下

先序遍歷的遞歸實現

void PreOrderTraversal( BinTree BT)
{
if( BT ){
printf("%d",BT->Data);
PreOrderTraversal( BT->left);
PreOrderTraversal( BT->right);
}
}

先序遍歷的非遞歸實現

void InOrderTraversal(BinTree BT)
{
BinTree T=BT;
Stack S = CreatStack(MaxSize);
while(T || !IsEmpty(S) ){
while(T){ //向左一直壓棧
printf("%d",T->Data); //訪問
Push(S,T);
T = T->Left;
}
if( !IsEmpty(s) ){
T=Pop(s); //結點彈出堆棧
T = T->Righr; //轉向右結點
}
}
}

中序遍歷的遞歸實現

void PreOrderTraversal( BinTree BT)
{
if( BT ){
PreOrderTraversal( BT->left);
printf("%d",BT->Data);
PreOrderTraversal( BT->right);
}
}

中序遍歷的非遞歸實現

void InOrderTraversal(BinTree BT)
{
BinTree T=BT;
Stack S = CreatStack(MaxSize);
while(T || !IsEmpty(S) ){
while(T){ //向左一直壓棧
Push(S,T);
T = T->Left;
}
if( !IsEmpty(s) ){
T=Pop(s); //結點彈出堆棧
printf("%d",T->Data); //訪問
T = T->Righr; //轉向右結點
}
}
}

后序遍歷的遞歸實現

void PreOrderTraversal( BinTree BT)
{
if( BT ){
PreOrderTraversal( BT->left);
PreOrderTraversal( BT->right);
printf("%d",BT->Data);
}
}

總結

以上是生活随笔為你收集整理的简述数据字典的结构及其作用_数据结构——树基本概念及其遍历的全部內容,希望文章能夠幫你解決所遇到的問題。

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