偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

 二叉樹的定義:

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

二叉樹具有五種基本的形態(tài):

  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; 

二叉樹的遍歷

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

二叉樹的遍歷方法:

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

1.首先創(chuàng)建一棵二叉樹

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

  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); 

通過二叉樹的結構來分析遞歸調用的執(zhí)行過程:(摘自大話數據結構 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; 

輸出如下圖所示:

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

代表當前節(jié)點的數據域為空

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

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

2020-04-27 07:05:58

二叉樹左子樹右子樹

2021-04-20 08:37:14

數據結構二叉樹

2021-04-19 07:47:42

數據結構二叉樹Tree

2020-09-23 18:25:40

算法二叉樹多叉樹

2021-04-28 20:12:27

數據結構創(chuàng)建

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

二叉樹回溯節(jié)點

2021-09-29 10:19:00

算法平衡二叉樹

2020-11-02 09:15:47

算法與數據結構

2021-05-06 17:46:30

二叉樹數據結構

2021-10-12 09:25:11

二叉樹樹形結構

2021-09-15 07:56:32

二叉樹層次遍歷

2023-05-08 15:57:16

二叉樹數據結構

2021-03-22 08:23:29

LeetCode二叉樹節(jié)點

2021-01-07 08:12:47

數據結構二叉樹

2021-11-29 10:40:58

二叉樹鏡像節(jié)點

2021-09-28 06:28:51

二叉樹公共祖先
點贊
收藏

51CTO技術棧公眾號