成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

二叉樹的定義以及存儲結構

存儲 存儲軟件
二叉樹是n個結點的有限集合,該集合或者為空集,或者由一個根結點和兩顆互不相交的、分別稱為根結點的左子樹和右子樹的二叉樹組成。

 二叉樹的定義:

二叉樹是n個結點的有限集合,該集合或者為空集,或者由一個根結點和兩顆互不相交的、分別稱為根結點的左子樹和右子樹的二叉樹組成。

二叉樹具有五種基本的形態:

  1. 空二叉樹。
  2. 只有一個根結點。
  3. 根結點只有左子樹。
  4. 根結點只有右子樹。

特殊的二叉樹

  1. 斜樹。
  2. 滿二叉樹。
  3. 完全二叉樹。

[[222529]]

二叉樹的順序存儲結構:

二叉樹的順序存儲結構就是用一維數組存儲二叉樹中的結點,并且結點的存儲位置,也就是數組的下標要能體現結點之間的邏輯關系,比如雙親與孩子的關系,左右兄弟的關系。

使用順序存儲結構表現二叉樹的時候,在其線性結構中,會存在一些空結點,但是其會占據一定的內存空間,會造成存儲空間的浪費;所以,順序存儲結構一般只用于完全二叉樹。

二叉樹的鏈式存儲結構:

由于二叉樹的每個結點最多有兩個孩子,所以為每個結點設計一個數據域和兩個指針域,通常將其稱之為二叉鏈表。

二叉鏈表的結點結構定義代碼:

  1. typedef char TElemType; 
  2. typedef struct BinaryTreeNode{ 
  3.     TElemType data;     
  4.     //lchild指向左結點的指針 
  5.     //rchild指向右結點的指針 
  6.     struct BinaryTreeNode *lchild,*rchild; 
  7. }BinaryTreeNode,*BinaryTree; 

二叉樹的遍歷

二叉樹的遍歷是指從根結點出發,按照某種次序一次訪問二叉樹中所有結點,使得每個結點被訪問一次且僅被訪問一次。

二叉樹的遍歷方法:

  1. 前序遍歷
  2. 中序遍歷
  3. 后序遍歷

1.首先創建一棵二叉樹

構建二叉樹,向結點的數據域中添加字符。

  1. void CreateBinaryTree(BinaryTree *T){ 
  2.     TElemType ch;     
  3.     cin>>ch;     
  4.     if (ch=='$'){ 
  5.         *T=NULL
  6.     }else
  7.         *T=new BinaryTreeNode;         
  8.         if (!*T)return
  9.         (*T)->data=ch; 
  10.         CreateBinaryTree(&(*T)->lchild); 
  11.         CreateBinaryTree(&(*T)->rchild); 
  12.     } 

2.二叉樹的前序遍歷算法

  1. void PreOrderTraverse(BinaryTree T){     
  2. if (T==NULL){         
  3.     cout<<"#"<<"  ";         
  4.         return
  5.     }     
  6.     cout<<T->data<<"  "
  7.     PreOrderTraverse(T->lchild); 
  8.     PreOrderTraverse(T->rchild); 

3.二叉樹的中序遍歷算法

  1. void InOderTraverse(BinaryTree T){     
  2. if(T!=NULL){         
  3.         cout<<"#"<<"  ";         
  4.         return
  5.     } 
  6.     InOderTraverse(T->lchild);     
  7.     cout<<T->data<<"  "
  8.     InOrderTraverse(T->rchild); 

4.二叉樹的后序遍歷算法

  1. void PostOrderTraverse(BinaryTree T){     
  2.     if (T->NULL){         
  3.         cout<<"#"<<"  ";         
  4.         return
  5.     } 
  6.     PostOrderTraverse(T->lchild); 
  7.     PostOrderTraverse(T->rchild);     
  8.     cout<<T->data<<"  "

前序遍歷、中序遍歷和后序遍歷算法的核心算法大致相同,都是利用了函數遞歸的原理。這里順帶補充一下關于函數遞歸調用的原理:

裴波那契數列的實現來講解函數的遞歸調用,假設存在這樣一個函數:

使用遞歸實現裴波那契數列代碼如下:

  1. int Fibonacci(int i){     
  2.     if (i<2){         
  3.         return i==0?0:1; 
  4.     }     
  5.         return Fibonacci(i-1)+Fibonacci(i-2); 

通過二叉樹的結構來分析遞歸調用的執行過程:(摘自大話數據結構 P103頁)

主函數中的測試代碼如下:

  1. //測試代碼int main() 
  2.     BinaryTree tree = new BinaryTreeNode;     
  3.     cout << "構建一顆由字符構成的二叉樹,#代表空" << endl; 
  4.     CreateBinaryTree(&tree);     
  5.     cout << "二叉樹的前序遍歷輸出" << endl; 
  6.     PreOderTraverse(tree);     
  7.     cout << endl;     
  8.     cout << "二叉樹的中序遍歷輸出" << endl; 
  9.     InOderTraverse(tree);     
  10.     cout << endl;     
  11.     cout << "二叉樹的后序遍歷輸出" << endl; 
  12.     PostOderTraverse(tree);     
  13.     cout << endl;     
  14.     return 0; 

輸出如下圖所示:

假設輸入這樣一個二叉樹數據結構:

代表當前節點的數據域為空

ABD#J##EK###CFL###G##

責任編輯:武曉燕 來源: 碼碼小蟲
相關推薦

2020-04-27 07:05:58

二叉樹左子樹右子樹

2021-04-19 07:47:42

數據結構二叉樹Tree

2021-04-20 08:37:14

數據結構二叉樹

2020-09-23 18:25:40

算法二叉樹多叉樹

2021-04-28 20:12:27

數據結構創建

2013-01-30 10:34:02

數據結構

2022-10-26 23:58:02

二叉樹數組算法

2013-07-15 16:35:55

二叉樹迭代器

2021-03-17 08:19:22

二叉樹LeetCode

2021-08-27 11:36:44

二叉樹回溯節點

2021-09-29 10:19:00

算法平衡二叉樹

2020-11-02 09:15:47

算法與數據結構

2021-09-15 07:56:32

二叉樹層次遍歷

2021-10-12 09:25:11

二叉樹樹形結構

2021-05-06 17:46:30

二叉樹數據結構

2021-03-22 08:23:29

LeetCode二叉樹節點

2023-05-08 15:57:16

二叉樹數據結構

2021-01-07 08:12:47

數據結構二叉樹

2021-09-28 06:28:51

二叉樹公共祖先

2021-11-29 10:40:58

二叉樹鏡像節點
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一级a爱片性色毛片免费 | 欧美日韩精品影院 | 欧美jizzhd精品欧美巨大免费 | 亚洲一区在线日韩在线深爱 | 国产成人在线免费 | 欧美精品中文字幕久久二区 | 日本人麻豆 | 黄网免费 | 狠狠干av| 99视频在线播放 | 亚洲精品女人久久久 | 狠狠天天 | 国产亚洲欧美日韩精品一区二区三区 | 亚洲人成在线观看 | 日韩一区二区不卡 | 请别相信他免费喜剧电影在线观看 | 亚洲精品一区二区三区免 | 啪啪网页 | 免费观看av网站 | 色综合桃花网 | 色综合一区二区三区 | 国产真实乱全部视频 | 精品国模一区二区三区欧美 | 亚洲精品一区二区三区蜜桃久 | 欧美成人免费在线 | 亚洲免费观看视频网站 | 亚洲视频手机在线 | 91国语清晰打电话对白 | 一区二区国产精品 | 日日日日日日bbbbb视频 | 羞羞色网站 | 国产精品日韩欧美一区二区三区 | 国产成人亚洲精品自产在线 | 欧美一级久久 | 亚洲午夜av久久乱码 | 免费精品视频在线观看 | 在线国产一区二区 | 久久国产99 | 精品日韩一区二区 | 天天天天天天天干 | 北条麻妃一区二区三区在线观看 |