<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. C語言

    C語言數據結構二叉樹簡單應用

    時間:2025-05-10 14:45:05 C語言 我要投稿
    • 相關推薦

    C語言數據結構二叉樹簡單應用

      在計算機科學中,二叉樹是每個節點最多有兩個子樹的樹結構。本文是百分網小編搜索整理的關于C語言數據結構二叉樹簡單應用的相關資料,供參考學習,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網!

      通常子樹被稱作“左子樹”(left subtree)和“右子樹”(right subtree),接下來我就在這里給大家介紹一下二叉樹在算法中的簡單使用:

      我們要完成總共有

      (1)二叉樹的創建

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

      (3)統計葉子結點的總數

      (4)求樹的高度

      (5)反轉二叉樹

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

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

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

      typedef struct node{

      char data;

      struct node *Lchild;

      struct node *Rchild;

      }BiTNode,*BiTree;

      int cnt=0;//統計葉子節點個數

      二叉樹的創建

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

      }

      }

      統計葉子結點個數:

      void LeafCountNode(BiTree root){  //統計葉子結點個數

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

      }

      }

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

      void OutPutPath(BiTree root,char path[],int len){      //輸出每個葉子結點到根節點的路徑

      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("葉子結點個數為:%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語言的應用05-29

    C語言知識總結及其簡單應用08-23

    C語言的主要應用07-29

    C語言的應用知識08-30

    C語言知識點及其簡單應用05-27

    C語言的reduce方法應用10-22

    C語言應用領域09-23

    C語言的應用有哪些08-05

    C語言的應用領域08-20

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人