最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言數(shù)據(jù)結構二叉樹簡單應用

 更新時間:2017年05月22日 09:08:07   投稿:lqh  
這篇文章主要介紹了C語言數(shù)據(jù)結構二叉樹簡單應用的相關資料,需要的朋友可以參考下

 C語言數(shù)據(jù)結構二叉樹簡單應用

在計算機科學中,二叉樹是每個節(jié)點最多有兩個子樹的樹結構。通常子樹被稱作“左子樹”(left subtree)和“右子樹”(right subtree),接下來我就在這里給大家介紹一下二叉樹在算法中的簡單使用:

我們要完成總共有

(1)二叉樹的創(chuàng)建

(2)二叉樹的先中后序遞歸遍歷

(3)統(tǒng)計葉子結點的總數(shù)

(4)求樹的高度

(5)反轉二叉樹

(6)輸出每個葉子結點到根節(jié)點的路徑

(7)輸出根結點到每個葉子結點的路徑。

定義二叉樹結點類型的結構體

typedef struct node{ 
  char data; 
  struct node *Lchild; 
  struct node *Rchild; 
}BiTNode,*BiTree; 
int cnt=0;//統(tǒng)計葉子節(jié)點個數(shù) 

二叉樹的創(chuàng)建

BiTNode *Create(){ //二叉樹的先序建立  
  char ch; 
  BiTNode *s; 
  ch=getchar(); 
  if(ch=='#')erchashu  
    return NULL; 
  s=(BiTNode *)malloc(sizeof(BiTNode)); 
  s->data=ch; 
  s->Lchild=Create(); 
  s->Rchild=Create(); 
  return s; 
} 

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

void PreOrder(BiTree root){   //前序遍歷  
  if(root){ 
    printf("%c ",root->data); 
    PreOrder(root->Lchild); 
    PreOrder(root->Rchild); 
  } 
} 
 
void InOrder(BiTree root){   //中序遍歷  
  if(root){ 
    InOrder(root->Lchild); 
    printf("%c ",root->data); 
    InOrder(root->Rchild); 
  } 
} 
 
void PostOrder(BiTree root){    //后序遍歷  
  if(root){ 
    PostOrder(root->Lchild); 
    PostOrder(root->Rchild); 
    printf("%c ",root->data); 
  } 
} 

統(tǒng)計葉子結點個數(shù):

void LeafCountNode(BiTree root){  //統(tǒng)計葉子結點個數(shù)  
  if(root){ 
    if(!root->Lchild && !root->Rchild) 
      cnt++; 
    LeafCountNode(root->Lchild); 
    LeafCountNode(root->Rchild); 
  } 
}  

輸出各個葉子結點值:

void IInOrder(BiTree root){ //輸出各個葉子結點值  
  if(root){ 
    IInOrder(root->Lchild); 
    if(!root->Lchild && !root->Rchild)  
      printf("%c ",root->data); 
    IInOrder(root->Rchild); 
  } 
} 

求樹的高度:

int PostTreeDepth(BiTree root){       //求樹的高度  
  int h1,h2,h; 
  if(root==NULL){ 
    return 0; 
  } 
  else{ 
    h1=PostTreeDepth(root->Lchild); 
    h2=PostTreeDepth(root->Rchild); 
    h=(h1>h2?h1:h2)+1; 
    return h; 
  } 
} 

反轉二叉樹:

void MirrorTree(BiTree root){        //二叉樹鏡像樹  
  BiTree t; 
  if(root==NULL) 
    return; 
  else{ 
    t=root->Lchild; 
    root->Lchild=root->Rchild; 
    root->Rchild=t; 
    MirrorTree(root->Lchild); 
    MirrorTree(root->Rchild); 
  } 
} 

輸出每個葉子結點到根節(jié)點的路徑:

void OutPutPath(BiTree root,char path[],int len){      //輸出每個葉子結點到根節(jié)點的路徑  
  if(root){ 
    if(!root->Lchild && !root->Rchild){ 
      printf("%c ",root->data); 
      for(int i=len-1;i>=0;i--) 
        printf("%c ",path[i]); 
      printf("\n");   
    } 
    path[len]=root->data; 
    OutPutPath(root->Lchild,path,len+1); 
    OutPutPath(root->Rchild,path,len+1); 
  } 
} 

輸出根到每個葉子結點的路徑:

void PrintPath(BiTree root,char path[],int l){     //輸出根到每個葉子結點的路徑 
  int len=l-1; 
  if(root){ 
    if(root->Lchild==NULL && root->Rchild==NULL){ 
      path[len]=root->data; 
      for(int i=9;i>=len;i--) 
        printf("%c ",path[i]); 
      printf("\n"); 
    } 
    path[len]=root->data; 
    PrintPath(root->Lchild,path,len); 
    PrintPath(root->Rchild,path,len); 
  }  
}  

測試代碼:

int main(void){ 
  int h,len; 
  char path[20]; 
  BiTree root; 
  root=Create(); 
// PreOrder(root); 
// printf("\n"); 
// InOrder(root); 
// printf("\n"); 
// PostOrder(root); 
// printf("\n"); 
// LeafCountNode(root); 
// printf("葉子結點個數(shù)為:%d\n",cnt); 
// IInOrder(root);  
  h=PostTreeDepth(root); 
  printf("樹的高度為:High=%d\n",h); 
// PrintTree(root,0); 
// MirrorTree(root);  
// PrintTree(root,0); 
// OutPutPath(root,path,0); 
// PrintPath(root,path,10);  
  return 0; 
} 

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • C語言線性表全面梳理操作方法

    C語言線性表全面梳理操作方法

    線性表,數(shù)據(jù)結構中最簡單的一種存儲結構,專門用于存儲邏輯關系為"一對一"的數(shù)據(jù)。線性表是基于數(shù)據(jù)在實際物理空間中的存儲狀態(tài),又可細分為順序表(順序存儲結構)和鏈表
    2022-04-04
  • C語言使用rand函數(shù)生成隨機數(shù)

    C語言使用rand函數(shù)生成隨機數(shù)

    這篇文章介紹了C語言使用rand函數(shù)生成隨機數(shù)的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-12-12
  • C++撲克牌的洗牌發(fā)牌游戲設計

    C++撲克牌的洗牌發(fā)牌游戲設計

    這篇文章主要為大家詳細介紹了C++撲克牌的洗牌發(fā)牌游戲設計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 利用Qt+opencv實現(xiàn)視頻分解為圖片

    利用Qt+opencv實現(xiàn)視頻分解為圖片

    這篇文章主要為大家詳細介紹了如何利用Qt和opencv實現(xiàn)視頻分解為圖片,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-12-12
  • 一文帶你分清C++的定義,聲明和初始化

    一文帶你分清C++的定義,聲明和初始化

    這篇文章主要為大家詳細介紹了C++的定義,聲明,初始化,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 詳解C++編程中的sizeof運算符與typeid運算符

    詳解C++編程中的sizeof運算符與typeid運算符

    這篇文章主要介紹了C++編程中的sizeof運算符與typeid運算符,是C++入門學習中的基礎知識,需要的朋友可以參考下
    2016-01-01
  • centos 7 vscode cmake 編譯c++工程的教程詳解

    centos 7 vscode cmake 編譯c++工程的教程詳解

    這篇文章給大家介紹了centos 7 使用vscode+cmake配置簡單c++項目的方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-05-05
  • C++ 基類指針和子類指針相互賦值的實現(xiàn)方法

    C++ 基類指針和子類指針相互賦值的實現(xiàn)方法

    下面小編就為大家?guī)硪黄狢++ 基類指針和子類指針相互賦值的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • C++改變編程入口為main函數(shù)

    C++改變編程入口為main函數(shù)

    這篇文章主要介紹了C++改變編程入口為main函數(shù)的方法的相關資料,需要的朋友可以參考下
    2015-06-06
  • C語言的字符函數(shù)和字符串函數(shù)詳解

    C語言的字符函數(shù)和字符串函數(shù)詳解

    這篇文章主要為大家介紹了C語言的字符函數(shù)和字符串函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01

最新評論

茂名市| 大冶市| 井研县| 偏关县| 区。| 青海省| 周至县| 峨山| 榕江县| 林芝县| 上杭县| 曲阜市| 河源市| 武威市| 临邑县| 葫芦岛市| 连山| 汤原县| 天镇县| 囊谦县| 建湖县| 赫章县| 嫩江县| 东光县| 吴忠市| 黄平县| 衡东县| 海兴县| 伊春市| 营山县| 德庆县| 临海市| 虎林市| 九江市| 兰州市| 渭源县| 丹江口市| 苏尼特右旗| 尤溪县| 景东| 根河市|