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

C語言 二叉樹的鏈?zhǔn)酱鎯?chǔ)實(shí)例

 更新時(shí)間:2016年07月12日 15:37:09   投稿:lqh  
本篇文章主要介紹C語言中二叉樹的鏈?zhǔn)酱鎯?chǔ),這里提供了一個(gè)實(shí)例代碼進(jìn)行參考,這樣對二叉樹的鏈?zhǔn)酱鎯?chǔ)有更深入的了解,希望能幫到學(xué)習(xí)這塊知識(shí)的同學(xué)

二叉樹的鏈?zhǔn)酱鎯?chǔ)

實(shí)現(xiàn)二叉樹的基本操作:建立、遍歷、計(jì)算深度、結(jié)點(diǎn)數(shù)、葉子數(shù)等。

輸入C,先序創(chuàng)建二叉樹,#表示空節(jié)點(diǎn);

輸入H:計(jì)算二叉樹的高度;

輸入L:計(jì)算二叉樹的葉子個(gè)數(shù);

輸入N:計(jì)算二叉樹節(jié)點(diǎn)總個(gè)數(shù);

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

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

輸入3:后續(xù)遍歷二叉樹;

輸入F:查找值=x的節(jié)點(diǎn)的個(gè)數(shù);

輸入P:以縮格文本形式輸出所有節(jié)點(diǎn)。

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

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
/*二叉樹的鏈?zhǔn)酱鎯?chǔ)表示*/
typedef char DataType; /*應(yīng)由用戶定義DataType的實(shí)際類型*/
typedef struct node
{
 DataType data;
 node *lchild, *rchild; /*左右孩子指針*/
} BinTNode;   /*結(jié)點(diǎn)類型*/
typedef BinTNode *BinTree;
int sum=0;
void DisplayBinTree(BinTree T); /*用格文本形式表示二叉樹*/
void CreateBinTree(BinTree *T); /*構(gòu)造二叉鏈表*/
void Preorder(BinTree T); /*前序遍歷二叉樹*/
void Inorder(BinTree T); /*中序遍歷二叉樹*/
void Postorder(BinTree T); /*后序遍歷二叉樹*/
int nodes(BinTree T);  /*計(jì)算總結(jié)點(diǎn)數(shù)*/
int leafs(BinTree T);  /*計(jì)算總?cè)~子數(shù)*/
int hight(BinTree T);  /*計(jì)算二叉樹的高度*/
int find(BinTree T,char x); //查找值=x的節(jié)點(diǎn)的個(gè)數(shù);
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;
 }
}

/*構(gòu)造二叉鏈表*/
void CreateBinTree(BinTree *T)
{
 char ch;
 if ((ch=getchar())=='#')
 *T=NULL;
 else
 {
 /*讀入非空格*/
 *T=(BinTNode *)malloc(sizeof(BinTNode));/*生成結(jié)點(diǎn)*/
 (*T)->data=ch;
 CreateBinTree(&(*T)->lchild );  /*構(gòu)造左子樹*/
 CreateBinTree(&(*T)->rchild );  /*構(gòu)造右子樹*/
 }
}
/*用縮格文本形式表示二叉樹*/
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;
  }
 }
 }
}
/*計(jì)算總結(jié)點(diǎn)數(shù)*/
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;
}
/*計(jì)算總?cè)~子數(shù)*/
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;
}
/*計(jì)算樹的高度*/
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); /*訪問結(jié)點(diǎn)*/
 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;
}

以上就是二叉樹鏈?zhǔn)酱鎯?chǔ)的一個(gè)小實(shí)例,需學(xué)習(xí)要的同學(xué)請參考,謝謝支持

相關(guān)文章

  • C語言詳細(xì)分析宏定義的使用

    C語言詳細(xì)分析宏定義的使用

    宏定義是用宏名來表示一個(gè)字符串,在宏展開時(shí)又以該字符串取代宏名,這只是一種簡單的替換。字符串中可以含任何字符,可以是常數(shù),也可以是表達(dá)式,預(yù)處理程序?qū)λ蛔魅魏螜z查,如有錯(cuò)誤,只能在編譯已被宏展開后的源程序時(shí)發(fā)現(xiàn)
    2022-04-04
  • C語言如何實(shí)現(xiàn)三子棋

    C語言如何實(shí)現(xiàn)三子棋

    這篇文章主要介紹了C語言如何實(shí)現(xiàn)三子棋問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • C++11?成員函數(shù)作為回調(diào)函數(shù)的使用方式

    C++11?成員函數(shù)作為回調(diào)函數(shù)的使用方式

    這篇文章主要介紹了C++11?成員函數(shù)作為回調(diào)函數(shù)的使用方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • vscode編譯運(yùn)行c語言報(bào)錯(cuò)亂碼的解決

    vscode編譯運(yùn)行c語言報(bào)錯(cuò)亂碼的解決

    本文主要介紹了vscode編譯運(yùn)行c語言報(bào)錯(cuò)亂碼,文中通過圖文介紹的的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • C++帶頭雙向循環(huán)鏈表超詳細(xì)解析

    C++帶頭雙向循環(huán)鏈表超詳細(xì)解析

    帶頭雙向循環(huán)鏈表:結(jié)構(gòu)最復(fù)雜,一般用在單獨(dú)存儲(chǔ)數(shù)據(jù)。實(shí)際中使用的鏈表數(shù)據(jù)結(jié)構(gòu),都是帶頭雙向循環(huán)鏈表。另外這個(gè)結(jié)構(gòu)雖然結(jié)構(gòu)復(fù)雜,但是使用代碼實(shí)現(xiàn)以后會(huì)發(fā)現(xiàn)結(jié)構(gòu)會(huì)帶來很多優(yōu)勢,實(shí)現(xiàn)反而簡單
    2022-03-03
  • C++標(biāo)準(zhǔn)模板庫函數(shù)sort的那些事兒

    C++標(biāo)準(zhǔn)模板庫函數(shù)sort的那些事兒

    sort函數(shù)是標(biāo)準(zhǔn)模板庫的函數(shù),已知開始和結(jié)束的地址即可進(jìn)行排序,可以用于比較任何容器(必須滿足隨機(jī)迭代器),任何元素,任何條件,執(zhí)行速度一般比qsort要快
    2013-09-09
  • C語言指針之必須要掌握的指針基礎(chǔ)知識(shí)

    C語言指針之必須要掌握的指針基礎(chǔ)知識(shí)

    這篇文章主要介紹了C語言指針必須要掌握的基礎(chǔ)知識(shí),文中實(shí)例講解的很清晰,有不太懂的同學(xué)可以研究下,希望能夠給你帶來幫助
    2021-09-09
  • C++迷宮問題的求解算法

    C++迷宮問題的求解算法

    這篇文章主要為大家詳細(xì)介紹了C++迷宮問題的求解算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • VS中PCL庫附加依賴項(xiàng)配置過程解析

    VS中PCL庫附加依賴項(xiàng)配置過程解析

    這篇文章主要介紹了VS中PCL庫附加依賴項(xiàng)配置,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • 代碼講解C++繼承和派生

    代碼講解C++繼承和派生

    在本文中我們通過實(shí)例代碼給大家講解下C++繼承和派生相關(guān)知識(shí)點(diǎn),需要的朋友們學(xué)習(xí)下。
    2019-02-02

最新評論

南丹县| 平塘县| 昭通市| 莒南县| 和田市| 德惠市| 福建省| 宜昌市| 黄梅县| 平顶山市| 宽城| 桦川县| 建德市| 明星| 宣化县| 五原县| 平遥县| 晋中市| 南涧| 琼结县| 邵阳县| 桓台县| 武夷山市| 襄樊市| 固安县| 长治市| 富宁县| 利川市| 沧州市| 云安县| 静乐县| 汝州市| 布拖县| 平邑县| 隆昌县| 潞城市| 射阳县| 台南市| 吉木乃县| 县级市| 于田县|