a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

C語言 二叉樹的鏈式存儲實例

2020-01-26 14:30:59
字體:
來源:轉載
供稿:網友

二叉樹的鏈式存儲

實現二叉樹的基本操作:建立、遍歷、計算深度、結點數、葉子數等。

輸入C,先序創建二叉樹,#表示空節點;

輸入H:計算二叉樹的高度;

輸入L:計算二叉樹的葉子個數;

輸入N:計算二叉樹節點總個數;

輸入1:先序遍歷二叉樹;

輸入2:中序遍歷二叉樹;

輸入3:后續遍歷二叉樹;

輸入F:查找值=x的節點的個數;

輸入P:以縮格文本形式輸出所有節點。

很簡單就不需要多解釋了,代碼貼上

#include <stdio.h>#include <stdlib.h>#include <iostream>using namespace std;/*二叉樹的鏈式存儲表示*/typedef char DataType; /*應由用戶定義DataType的實際類型*/typedef struct node{ DataType data; node *lchild, *rchild; /*左右孩子指針*/} BinTNode;   /*結點類型*/typedef BinTNode *BinTree;int sum=0;void DisplayBinTree(BinTree T); /*用格文本形式表示二叉樹*/void CreateBinTree(BinTree *T); /*構造二叉鏈表*/void Preorder(BinTree T); /*前序遍歷二叉樹*/void Inorder(BinTree T); /*中序遍歷二叉樹*/void Postorder(BinTree T); /*后序遍歷二叉樹*/int nodes(BinTree T);  /*計算總結點數*/int leafs(BinTree T);  /*計算總葉子數*/int hight(BinTree T);  /*計算二叉樹的高度*/int find(BinTree T,char x); //查找值=x的節點的個數;int main(){ BinTree T; char flg; while(cin>>flg) switch(flg) { case'C':  getchar();  CreateBinTree(&T);  cout<<"Created success!"<<endl;  break; case'H':  cout<<"Height="<<hight(T)<<"."<<endl;  break; case'L':  cout<<"Leaf="<<leafs(T)<<"."<<endl;  break; case'N':  cout<<"Nodes="<<nodes(T)<<"."<<endl;  break; case'1':  printf("Preorder is:");  Preorder(T);  cout<<"."<<endl;  break; case'2':  printf("Inorder is:");  Inorder(T);  cout<<"."<<endl;  break; case'3':  printf("Postorder is:");  Postorder(T);  cout<<"."<<endl;  break; case'F':  char x;  int ko;  getchar();  cin>>x;  ko=find(T,x);  cout<<"The count of "<<x<<" is "<<ko<<"."<<endl;  break; case'P':  cout<<"The tree is:"<<endl;  DisplayBinTree(T);  break; default:  cout<<"輸入有誤,請重新輸入"<<endl; }}/*構造二叉鏈表*/void CreateBinTree(BinTree *T){ char ch; if ((ch=getchar())=='#') *T=NULL; else { /*讀入非空格*/ *T=(BinTNode *)malloc(sizeof(BinTNode));/*生成結點*/ (*T)->data=ch; CreateBinTree(&(*T)->lchild );  /*構造左子樹*/ CreateBinTree(&(*T)->rchild );  /*構造右子樹*/ }}/*用縮格文本形式表示二叉樹*/void DisplayBinTree(BinTree T){ BinTree stack[100],p; int level[100],top,n,i; if (T) { top=1; stack[top]=T; level[top]=0; while(top>0) {  p=stack[top];  n=level[top];  for (i=1; i<=n; i++)  cout<<" ";  printf("%c/n",p->data);  top--;  if (p->rchild!=NULL)  {  top++;  stack[top]=p->rchild;  level[top]=n+2;  }  if (p->lchild!=NULL)  {  top++;  stack[top]=p->lchild;  level[top]=n+2;  } } }}/*計算總結點數*/int nodes(BinTree T){ if(T) { if( (T->lchild==NULL)&&(T->rchild==NULL))  return 1; else  return nodes(T->lchild)+nodes(T->rchild)+1; } return 0;}/*計算總葉子數*/int leafs(BinTree T){ if(T) { if ((T->lchild==NULL)&&(T->rchild==NULL))  return 1; else  return leafs(T->lchild)+leafs(T->rchild); } return 0;}/*計算樹的高度*/int hight(BinTree T){ if(T) { if ((T->lchild==NULL)&&(T->rchild==NULL))  return 1; else if((T->lchild==NULL)&&(T->rchild))  return 1+hight(T->rchild); else if((T->lchild)&&(T->rchild==NULL))  return 1+hight(T->lchild); else  return hight(T->lchild)+hight(T->rchild); } return 0;}/*前序遍歷二叉樹*/void Preorder(BinTree T){ if(T) { printf("%c ",T->data); /*訪問結點*/ Preorder(T->lchild); Preorder(T->rchild); }}/*中序遍歷二叉樹*/void Inorder(BinTree T){ if(T) { Inorder(T->lchild); printf("%C ",T->data); Inorder(T->rchild); }}/*后序遍歷二叉樹*/void Postorder(BinTree T){ if(T) { Postorder(T->lchild); Postorder(T->rchild); printf("%C ",T->data); }}int find(BinTree T,char x){ if(T) { if((T->data)==x)  sum++; find(T->lchild,x); find(T->rchild,x); } return sum;}

以上就是二叉樹鏈式存儲的一個小實例,需學習要的同學請參考,謝謝支持

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 亚洲一区二区 | 欧洲精品一区二区 | 日本天堂一区二区 | 天堂在线免费视频 | 色综合激情 | 国产毛片精品 | 久久久国产一区二区三区四区小说 | 正在播放国产一区二区 | 中文字幕av亚洲精品一部二部 | 视频一区二区国产 | 欧美成人一级视频 | 欧美精品久久久久久久久 | 久久av免费 | 91精彩刺激对白露脸偷拍 | 亚洲第一成年免费网站 | 日本aa级毛片免费观看 | 欧美综合视频在线观看 | 欧美一区二区高清 | 玖玖视频在线 | 久久天堂| 午夜精品久久久久久久久久久久 | 97国产精品视频人人做人人爱 | 亚洲高清在线观看 | 欧美成人精品激情在线观看 | 亚洲国产高清视频 | 国产成人精品免高潮在线观看 | 国产一区二区影院 | 亚州中文字幕 | 国产成人黄色 | 久久毛片| 国产区免费观看 | 亚洲天天| 一区二区免费 | 国产精品久久久久久久久久久久冷 | 欧美一级爱爱 | 亚洲天堂美女视频 | 麻豆资源| 在线一二区| www一区| 99riav国产一区二区三区 | 久久精品一区二区三区四区 |