<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>
            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

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看