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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【数据结构基础笔记】【树】

發(fā)布時間:2023/12/1 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【数据结构基础笔记】【树】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

代碼參考《妙趣橫生的算法.C語言實現(xiàn)》

文章目錄

  • 前言
    • 1、樹的概念
    • 2、二叉樹
    • 3、二叉樹的遍歷
    • 4、創(chuàng)建二叉樹
    • 5、實例分析


前言

本章總結:樹的概念、二叉樹的創(chuàng)建、遍歷


1、樹的概念

樹結構是以分支關系定義得一種層次結構。
樹的定義:樹是由n(n>=0)個結點組成的有窮集合。在任意的一棵非空樹中:
1、有且僅有一個稱為根(root)的結點
2、當n>1時,其余的結點分為m(m>0)個互不相交的有限集合T1,T2,T3,…Tm.其中每個集合本身又是一棵樹,并稱為跟的子樹(SubTree)

以上圖為例,A是root,BCD是A的child,以BCD為根節(jié)點構成3棵樹,為A的字·SubTree。
樹的存儲形式:多重鏈表,在多重鏈表中每個結點由一個數(shù)據(jù)域和若干個指針域組成,其中每個指針域指向該結點的一個孩子結點。
多重鏈表結點類型描述:

#define MaxChild 10 typedef struct node {ElemType data;struct node* child[MaxChild]; //指向孩子結點的指針數(shù)組,將父節(jié)結點和子結點聯(lián)系起來 };

在利用多重鏈表表示樹結構時分定長結點(每個結點的指針域個數(shù)固定)和不定長結點(每個結點的指針域個數(shù)不固定)

對于二叉樹來說,一個結點至多可以有左右兩個孩子結點,或者只有一個孩子結點,或者沒有孩子結點。
T是一個指針,指向二叉樹的根結點。只有得到T,才能訪問整個樹結構。

2、二叉樹

二叉樹的遞歸定義:二叉樹是這樣的樹結構,它或者為空,或者由一個根結點加上兩棵分別稱為左子樹和右字數(shù)的互不相交的二叉樹組成。

二叉樹結點有三個域,lchild、rchild為指針域,用來指向該結點的左孩子和右孩子。data是數(shù)據(jù)域,用來存放該結點中包含的數(shù)據(jù)。

//二叉樹結點定義 typedef struct BiTNode {ElemType data;struct BiTNode* lchild, * rchild; }BiTNode,*BiTreee; //二叉樹結點類BiTNode,二叉樹每個結點都屬于該類型 //BiTree是一個指向BiTNode類型數(shù)據(jù)的指針

3、二叉樹的遍歷

從一個結點(一般來說是根結點)出發(fā),按一定規(guī)律訪問二叉樹的全部結點,每個結點只訪問一次。

應用二叉樹遞歸地邏輯特性,采用遞歸方法遍歷二叉樹。

1、先序遍歷

1、訪問根結點

2、先序遍歷左子樹

3、先序遍歷右子樹

2、中序遍歷

1、中序遍歷左子樹

2、訪問根結點

3、中序遍歷右子樹

//定義visit函數(shù) //訪問結點,輸出結點的層數(shù) void visit(char c) {printf("%c is at %d the level of BiTree\n"); } //**********************遍歷二叉樹*********************// //先序遍歷 void PreOrderTraverse(BiTreee T) {if (T) //遞歸結束條件,T為空{visit(T->data); //訪問根結點PreOrderTraverse(T->lchild); //先序遍歷左子樹PreOrderTraverse(T->rchild); //先序遍歷右子樹} } //中序遍歷 void InOrderTraverse(BiTreee T) {if (T) //遞歸結束條件,T為空{InOrderTraverse(T->lchild); //先序遍歷左子樹visit(T->data); //訪問根結點InOrderTraverse(T->rchild); //先序遍歷右子樹} } //后序遍歷 void PosOrderTraverse(BiTreee T) {if (T) //遞歸結束條件,T為空{PosOrderTraverse(T->lchild); //先序遍歷左子樹PosOrderTraverse(T->rchild); //先序遍歷右子樹visit(T->data); //訪問根結點} }

4、創(chuàng)建二叉樹

借鑒二叉樹的遍歷算法也可以逐個生成結點,從而創(chuàng)建出一個二叉樹。

//先序創(chuàng)建一棵二叉樹 void CreateBiTree(BiTreee* T) {char c;scanf("%c",&c);if (c == ' ') *T = NULL;else{*T = (BiTNode *)malloc(sizeof(BiTNode)); //創(chuàng)建根結點(*T)->data = c; //向根結點中輸入數(shù)據(jù)CreateBiTree(&((*T)->lchild)); //遞歸地創(chuàng)建左子樹CreateBiTree(&((*T)->rchild)); //遞歸地創(chuàng)建右子樹} } //依次輸入:ABC D E F // //空格是遞歸結束的標志,當創(chuàng)建到葉子結點時,因為葉子結點的左右子樹都為空,因此要輸入空格表示結束。在創(chuàng)建二叉樹的過程中,程序總是按照:創(chuàng)建根結點-創(chuàng)建左子樹-創(chuàng)建右子樹順序進行

5、實例分析

用先序創(chuàng)建一棵樹,并輸出每個字符位于二叉樹的層數(shù)

#include "stdio.h" #include "malloc.h" #include "conio.h" #include <stdlib.h> #include <math.h> typedef char ElemType ; #define MaxChild 10 typedef struct node {ElemType data;struct node* child[MaxChild]; //指向孩子結點的指針數(shù)組,將父節(jié)結點和子結點聯(lián)系起來 }; //在利用多重鏈表表示樹結構時分定長結點(每個結點的指針域個數(shù)固定)和不定長結點(每個結點的指針域個數(shù)不固定) //對于二叉樹來說,一個結點至多可以有左右兩個孩子結點,或者只有一個孩子結點,或者沒有孩子結點。 //T是一個指針,指向二叉樹的根結點。只有得到T,才能訪問整個樹結構。//二叉樹結點定義 typedef struct BiTNode {ElemType data;struct BiTNode* lchild, * rchild; }BiTNode,*BiTreee; //二叉樹結點類BiTNode,二叉樹每個結點都屬于該類型 //BiTree是一個指向BiTNode類型數(shù)據(jù)的指針//定義visit函數(shù) //訪問結點,輸出結點的層數(shù) void visit(char c,int level) {printf("%c is at %d the level of BiTree\n",c, level); } //**********************遍歷二叉樹*********************// //先序遍歷 void PreOrderTraverse(BiTreee T,int level) {if (T) //遞歸結束條件,T為空{visit(T->data,level); //訪問根結點PreOrderTraverse(T->lchild, level+1); //先序遍歷左子樹,層數(shù)+1PreOrderTraverse(T->rchild, level+1); //先序遍歷右子樹,層數(shù)+1} } //中序遍歷 void InOrderTraverse(BiTreee T, int level) {if (T) //遞歸結束條件,T為空{InOrderTraverse(T->lchild, level + 1); //中序遍歷左子樹,層數(shù)+1visit(T->data, level); //訪問根結點InOrderTraverse(T->rchild, level+1); //中序遍歷右子樹,層數(shù)+1} } //后序遍歷 void PosOrderTraverse(BiTreee T, int level) {if (T) //遞歸結束條件,T為空{PosOrderTraverse(T->lchild, level + 1); //中序遍歷左子樹,層數(shù)+1PosOrderTraverse(T->rchild, level+1); //中序遍歷右子樹,層數(shù)+1visit(T->data, level); //訪問根結點} } //先序創(chuàng)建一棵二叉樹 void CreateBiTree(BiTreee* T) {char c;scanf("%c",&c);if (c == '@') *T = NULL;else{*T = (BiTNode *)malloc(sizeof(BiTNode)); //創(chuàng)建根結點(*T)->data = c; //向根結點中輸入數(shù)據(jù)CreateBiTree(&((*T)->lchild)); //遞歸地創(chuàng)建左子樹CreateBiTree(&((*T)->rchild)); //遞歸地創(chuàng)建右子樹} } //依次輸入:ABC D E F // //空格是遞歸結束的標志,當創(chuàng)建到葉子結點時,因為葉子結點的左右子樹都為空,因此要輸入空格表示結束。在創(chuàng)建二叉樹的過程中,程序總是按照:創(chuàng)建根結點-創(chuàng)建左子樹-創(chuàng)建右子樹順序進行//測試程序 int main() {int level = 1;BiTreee T = NULL;printf("創(chuàng)建二叉樹\n");CreateBiTree(&T); //創(chuàng)建二叉樹printf("==================先序遍歷==========================\n");PreOrderTraverse(T,level); //先序遍歷level = 1;printf("==================中序遍歷==========================\n");InOrderTraverse(T, level); //先序遍歷level = 1;printf("==================后序遍歷==========================\n");PosOrderTraverse(T, level); //先序遍歷level = 1;_getche();return 0; }

效果:

結果顯然對的,并且能夠顯示出三種遍歷方式的具體遍歷過程

總結

以上是生活随笔為你收集整理的【数据结构基础笔记】【树】的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产一区日韩 | 国产成人啪免费观看软件 | 成人福利网站在线观看 | 九九热精品在线观看 | www.久久视频 | 搡8o老女人老妇人老熟 | 精品久久在线观看 | 欧美日国产 | 18无码粉嫩小泬无套在线观看 | av尤物在线 | 黄色在线免费观看网站 | 国产精久久久 | 神马午夜888 | 亚洲在线观看视频 | 女裸全身无奶罩内裤内衣内裤 | 久久久香蕉网 | 麻豆网| 国产精品久久不卡 | 艳母在线视频 | 久久人人爽人人 | 高跟肉丝丝袜呻吟啪啪网站av | 亚洲一区不卡在线 | 日韩精品久久一区二区 | www一级片 | 一区二区三区免费观看 | 开心成人激情 | 射射射综合网 | 国产午夜精品福利视频 | 成人美女免费网站视频 | 男人天堂网站 | 久久综合福利 | 亚洲一区视频 | 五月婷婷综合网 | 欧美性猛交xxxx偷拍洗澡 | 一二三四精品 | 深夜成人福利 | 在线日韩三级 | 成人天堂av| 中文字幕亚洲在线观看 | 寂寞午夜影院 | 色人综合| 亚洲深夜在线 | 久久精品五月天 | 爱如潮水3免费观看日本高清 | 国模人体私拍xvideos | 日本不卡一区二区三区视频 | 久久黄页 | 亚洲操操 | 青青插 | jzz国产| 天天操人人 | 夜夜综合网 | 日韩av在线免费看 | 国产91精品一区二区绿帽 | 成人av免费在线观看 | 欧美乱妇高清无乱码 | 青青国产视频 | 精品毛片在线观看 | 日韩欧美国产综合 | 久久久无码18禁高潮喷水 | 黄色资源在线播放 | 91蜜桃在线观看 | 美女又大又黄 | 激情www| 亚州a级片| 国产美女网| 日韩大片一区 | 爱乃なみ加勒比在线播放 | 91视频污在线观看 | 日本一级做a爱片 | 欧美性生活一级 | 国产福利免费视频 | 男生吃小头头的视频 | 欧美激情亚洲 | 国产精选网站 | 特黄特色特刺激免费播放 | 美女国产在线 | 哺乳喂奶一二三区乳 | 久久亚洲AV成人无码国产野外 | 日韩一区视频在线 | 第九色激情 | 国产传媒视频在线观看 | 懂色av一区二区三区免费 | 久久av红桃一区二区小说 | 日本无翼乌邪恶大全彩h | 国产免费内射又粗又爽密桃视频 | 不卡的av在线 | 丰满岳妇乱一区二区三区 | 日日干夜夜骑 | 好吊色在线观看 | 91大神在线看 | 狠狠av| 国产原创视频在线 | 五月天视频 | 国产精品视频网址 | 97公开免费视频 | 久久久久久久久久久网站 | 欧美一区二区三区成人 | 18视频在线观看娇喘 |