二叉樹的基本操作及應用(三)

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
typedef char DataType;
int depth=0;
int h1=1;
int nlayer=1;
char ch2;
typedef struct node
{DataType data;//節點數據元素struct node *lchild;//指向左孩子struct node *rchild;//指向右孩子
}BinTNode,*BinTree;
void GetPreOrder(char *last,char *mid,BinTree &T,int len)
{//利用后序和中序建立二叉樹if(len==0){T = NULL;return;} //取出后序序列中的最后一個節點char ch=last[len-1];int index=0;  //在中序序列中進行查找根節點,并用index記錄其在序列中的索引while(mid[index]!=ch){index++;} T=(BinTree)malloc(sizeof(BinTNode)); //給根節點分配空間T->data=mid[index];  GetPreOrder(last,mid,T->lchild,index);//建立左子樹  GetPreOrder(last+index,mid+index+1,T->rchild,len-index-1);//建立右子樹
}
void GetPostOrder(char *prim,char *mid,BinTree &T,int len)
{//利用先序和中序建立二叉樹if(len==0){T=NULL;return;}  char ch=prim[0];//提出先序序列中的第一個節點int index=0;  while(mid[index]!=ch){//在中序序列中查找當前根節點。并用index記錄其在序列中的位置index++;}  //給根節點分配空間T=(BinTree)malloc(sizeof(BinTNode));T->data=mid[index];  GetPostOrder(prim+1,mid,T->lchild,index); //建立左子樹 GetPostOrder(prim+index+1,mid+index+1,T->rchild,len-index-1);//建立右子樹
}
void createB(BinTree &T)
{//擴展先序遍歷創建二叉鏈表DataType ch;scanf("%c",&ch);if(ch=='.')T=NULL;else{T=(BinTNode *)malloc(sizeof(BinTNode));T->data=ch;createB(T->lchild);createB(T->rchild);}
}
void gradeBT(BinTree &T,DataType ch,int d,int *n)
{/*求ch結點所在層數*/if (T)  {d++;if(T->data==ch)*n=d;gradeBT(T->lchild,ch,d,n);gradeBT(T->rchild,ch,d,n);}
}
void countdef(BinTree T,int &n)
{  /*統計葉子結點數*/if(T!=NULL){if(T->lchild==NULL&&T->rchild==NULL)n++;countdef(T->lchild,n);countdef(T->rchild,n);}
}
int depthhou(BinTree bt)
{//后序遍歷求二叉樹的高度int hl,hr,max;if(bt!=NULL){hl=depthhou(bt->lchild);hr=depthhou(bt->rchild);max=hl>hr?

hl:hr; return (max+1); } else return 0; } void depthxian(BinTree bt,int h1) {//先序遍歷求二叉樹高度 if(bt!=NULL) { if(h1>depth) depth=h1; depthxian(bt->lchild,h1+1); depthxian(bt->rchild,h1+1); } } void PrintTree(BinTree bt,int nlayer) {//樹狀打印二叉樹 if(bt==NULL) return; PrintTree(bt->rchild,nlayer+1); for(int i=0;i<nlayer;i++) printf(" "); printf("%c\n",bt->data); PrintTree(bt->lchild,nlayer+1); } void Inorderxian(BinTree &T) {//先序輸出二叉樹 if(T!=NULL) { printf("%3c",T->data); Inorderxian(T->lchild); Inorderxian(T->rchild); } } void Inorderzhong(BinTree &T) {//中序輸出二叉樹 if(T!=NULL) { Inorderzhong(T->lchild); printf("%3c",T->data); Inorderzhong(T->rchild); } } void Inorderhou(BinTree &T) {//后序輸出二叉樹 if(T!=NULL) { Inorderhou(T->lchild); Inorderhou(T->rchild); printf("%3c",T->data); } } void main() { DataType ch; BinTree root; BinTree T=NULL; BinTree BT=NULL; int d=0,h=0,l=1,n=0; int x,count2=0,count3=0; DataType first[26],mid[26],last[26]; root=(BinTNode *)malloc(sizeof(BinTNode)); printf("*****************************************************************\n"); printf("* 1、擴展先序遍歷創建二叉樹 2、統計二叉樹葉子結點數 *\n"); printf("* 3、先序遍歷求二叉樹高度 4、后序遍歷求二叉樹高度 *\n"); printf("* 5、按樹狀打印二叉樹 7、利用先序和中序創建二叉樹 *\n"); printf("* 8、利用后序和中序創建二叉樹 9、先序輸出二叉樹 *\n"); printf("* 10、中序輸出二叉樹 11、后序輸出二叉樹 *\n"); printf("*****************************************************************\n"); printf("請輸入你的選擇:\n"); //第一種方法創建二叉樹 printf("請依照先序遍歷的順序輸入須要中序遍歷的字符:\n"); createB(root); printf("先序遍歷輸入二叉樹例如以下:"); Inorderxian(root); printf("\n"); printf("中序遍歷輸入二叉樹例如以下:"); Inorderzhong(root); printf("\n"); printf("后序遍歷輸入二叉樹例如以下:"); Inorderhou(root); printf("\n\n"); printf("統計二叉樹葉子數:"); countdef(root,n); printf("count=%d\n",n); printf("先序遍歷輸出二叉樹的高度:"); depthxian(root,h1); printf("depthxain=%d\n",depth); printf("后序遍歷輸出二叉樹的高度:"); printf("depthhou=%d\n",depthhou(root)); printf("打印輸出二叉樹的樹狀結構:\n"); PrintTree(root,1); //另外一種方法創建二叉樹 printf("請輸入先序和中序序列:\n"); scanf("%s%s",first,mid); GetPostOrder(first,mid,T, strlen(first)); printf("打印輸出二叉樹的樹狀結構:\n"); PrintTree(root,1); printf("先序遍歷輸入二叉樹例如以下:"); Inorderxian(T); printf("\n"); printf("中序遍歷輸入二叉樹例如以下:"); Inorderzhong(T); printf("\n"); printf("后序遍歷輸入二叉樹例如以下:"); Inorderhou(T); printf("\n"); printf("統計二叉樹葉子數:"); countdef(T,count2); printf("count2=%d\n",count2); printf("先序遍歷輸出二叉樹的高度:"); depthxian(T,h1); printf("depthxain=%d\n",depth); printf("后序遍歷輸出二叉樹的高度:"); printf("depthhou=%d\n",depthhou(T)); //第三種方法創建二叉樹 printf("請輸入后序和中序序列:\n"); scanf("%s%s",last,mid); GetPreOrder(last,mid,BT,strlen(last)); printf("打印輸出二叉樹的樹狀結構:\n"); PrintTree(BT,1); printf("先序遍歷輸入二叉樹例如以下:"); Inorderxian(BT); printf("\n"); printf("中序遍歷輸入二叉樹例如以下:"); Inorderzhong(BT); printf("\n"); printf("后序遍歷輸入二叉樹例如以下:"); Inorderhou(BT); printf("\n"); printf("統計二叉樹葉子數:"); countdef(BT,count3); printf("count3=%d\n",count3); printf("先序遍歷輸出二叉樹的高度:"); depthxian(BT,h1); printf("depthxain=%d\n",depth); printf("后序遍歷輸出二叉樹的高度:"); printf("depthhou=%d\n",depthhou(BT)); printf("\n"); printf("\n"); }


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/394562.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394562.shtml
英文地址,請注明出處:http://en.pswp.cn/news/394562.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

maven的profile詳解

詳細內容請見&#xff1a;https://www.cnblogs.com/wxgblogs/p/6696229.html Profile能讓你為一個特殊的環境自定義一個特殊的構建&#xff1b;profile使得不同環境間構建的可移植性成為可能。Maven中的profile是一組可選的配置&#xff0c;可以用來設置或者覆蓋配置默認值。有…

夏至未至計算機版音樂,夏至未至有哪些插曲背景音樂 夏至未至所有bgm歌曲匯總...

夏至未至有哪些插曲背景音樂 夏至未至所有bgm歌曲匯總夏至未至第一集插曲是什么?夏至未至插曲曝光。夏至未至是由陳學冬、鄭爽、白敬亭等聯袂主演的青春偶像劇,昨晚已經開播了&#xff0c;那么第一集的插曲是什么呢?和小編一起去看看吧!夏至未至第一集插曲《那些花兒》那片笑…

了解如何在20分鐘內創建您的第一個Angular應用

Angular is a JavaScript framework, created my Misko Hevery and maintained by Google. It’s an MVC (Model View Vontroller). You can visit the official page to learn more about it.Angular是一個JavaScript框架&#xff0c;創建了我的Misko Hevery&#xff0c;并由G…

js閉包使用

閉包就是在一個函數內定義一個內部函數 并返回內部函數 function f1(){var a1; addfunction(){aa1;} function f1Sub(){ console.log(a); } return f1Sub; } var ff1();f();add();f();var f2f1();add();f(); 輸出為 1 2 2 可以看到輸出結果 定義f2后執行add 這時 f2的add函數已…

BIO,NIO,AIO總結(二)

這里重點介紹NIO 待定 http://www.apigo.cn/2018/11/09/javacore5/ https://juejin.im/entry/598da7d16fb9a03c42431ed3 https://mp.weixin.qq.com/s/c9tkrokcDQR375kiwCeV9w?轉載于:https://www.cnblogs.com/smallJunJun/p/10607078.html

思科配置計算機ip地址子網掩碼,計算機系統與網絡技術IP地址 子網掩碼 主機號等計算復習...

IP地址 子網掩碼 主機號等計算復習IP地址、子網掩碼、網絡號、主機號、網絡地址、主機地址復習 IP地址&#xff1a;4段十進制&#xff0c;共32位二進制&#xff0c;如&#xff1a;192.168.1.1 二進制就是&#xff1a;11000000&#xff5c;10101000&#xff5c;00000001&#xf…

nmap常用參數詳解

nmap常用參數詳解 作者&#xff1a;尹正杰 版權聲明&#xff1a;原創作品&#xff0c;謝絕轉載&#xff01;否則將追究法律責任。 借用英雄聯盟的一個英雄趙信的一句話&#xff1a;“即使敵眾我寡,末將亦能萬軍叢中取敵將首級!”。三國關羽&#xff0c;萬軍叢中斬了顏良&#x…

r語言r-shiny_使用Shiny和R構建您的第一個Web應用程序儀表板

r語言r-shinyby AMR通過AMR 使用Shiny和R構建您的第一個Web應用程序儀表板 (Build your first web app dashboard using Shiny and R) One of the beautiful gifts that R has (that Python missed,until dash) is Shiny. Shiny is an R package that makes it easy to build …

RHEL5.8配置開機自動掛載磁盤

Linux環境中可以通過fstab來設置自動掛載磁盤或者共享存儲&#xff0c;操作如下&#xff1a; fstab配置文件路徑&#xff1a;/etc/fstab 每行代表一個存儲位置。 [rootappsrv01 ~]# cat /etc/fstab LABEL/ / ext3 defaults 1…

909計算機基礎大綱,《計算機應用基礎》(專科)考試大綱

《計算機應用基礎》(專科)考試大綱《計算機應用基礎》考試大綱考試對象&#xff1a;《計算機應用基礎》考試大綱適用于網絡教育所有專業的高中起點專科學生。 考試教材&#xff1a;《全國計算機等級考試一級MS Office教程》(2004版)&#xff0c;南開大學出版社 課程學時&#x…

模板變量,過濾器和靜態文件引用

模板變量&#xff0c;過濾器和靜態文件引用 模板路徑 Djiango先到settings里面找templates下的DIRS查看是否有路徑&#xff0c;也是從上往下依次尋找&#xff0c;找到就返回。如果DIRS沒有&#xff0c;就到APP_DIRS里面尋找。但是APP要先在INSTALLED_APPS里面進行注冊然后根據I…

antd option寬度自適應_WordPress文章中添加自適應寬度的表格——墨澀網

WordPress文章中添加自適應表格&#xff0c;前面寫文章的時候需要用到表格來表達陣列信息&#xff0c;但是在WordPress添加表格不想是在office中那樣方便&#xff0c;需要借助插件或者代碼才可以實現&#xff0c;今天分享一個不需要安裝插件純代碼實現WordPress文章中添加自適應…

Go語言程序記錄日志

許多軟件系統運行中需要日志文件。Go語言程序中&#xff0c;輸出日志需要使用包"log"&#xff0c;編寫程序十分簡單。 像Java語言程序&#xff0c;輸出日志時&#xff0c;往往需要使用開源的軟件包來實現&#xff0c;編寫程序稍微復雜一些。 Go語言的包"log&quo…

如何讓代碼更易于維護_如何輕松地使您的網站更易于訪問

如何讓代碼更易于維護by Jaroslav Vaňkt通過JaroslavVaňkt 如何輕松地使您的網站更易于訪問 (How you can easily make your website more accessible) As a designer, developer, or even product manager, you have thousands of responsibilities. Every project require…

計算機安全概論論文,計算機安全探討論文畢業論文(7篇).doc

計算機安全探討論文畢業論文(7篇)計算機安全探討論文畢業論文(7篇)計算機安全探討論文畢業論文(7篇)預讀: 第一篇:終端計算機安全檢查技術研究【摘要】信息安全保密管理工作的重點和計算機終端檢查的難點,促進了計算機安全檢查技術的發展.本文回顧了終端檢查技術經歷的三個階段…

OO第一單元總結

OO第一單元總結 第一次作業總結 這是我第一次接觸Java和面向對象思想&#xff0c;最一開始&#xff0c;我建立了簡單的類和對象的概念&#xff0c;多虧了第一次作業難度和復雜度較低&#xff0c;我才沒有崩掉hhh。 第一次作業我只分了三個類&#xff0c;一個main&#xff0c;一…

接口開發指的是什么_企業在什么情況下要選擇定制開發軟件

軟件定制開發是指軟件開發商依據我們的需求停止量身定制的開發&#xff0c;軟件定制開發相關于單純產品的施行周期長、本錢高、風險大。假如根據定制開發的工作量或水平來分&#xff0c;我們能夠分為完整定制開發和局部定制開發&#xff0c;完整定制開發是指軟件開發公司依據我…

python2x 安裝 psutil

安裝psutil模塊&#xff1a; wget https://pypi.python.org/packages/source/p/psutil/psutil-2.0.0.tar.gz --no-check-certificatetar -zxvf psutil-2.0.0.tar.gzcd psutil-2.0.0python setup.py install轉載于:https://www.cnblogs.com/yingdiblog/p/7347325.html

c++編碼風格指南_帶回家的編碼挑戰的基本指南

c編碼風格指南by Jane Philipps簡菲利普斯 帶回家的編碼挑戰的基本指南 (The Essential Guide to Take-home Coding Challenges) 介紹 (Introduction) Hi, I’m Jane. I wrote this guide because I want to help others with non-traditional backgrounds succeed on take-ho…

計算機沒有搜索篩選功能,EXCEL中篩選工具怎么沒有搜索功能

EXCEL中篩選工具怎么沒有搜索功能卡飯網本站整理2018-04-01excel是一款數據處理工具&#xff0c;可以在眾多的數據中找到想要的經過處理之后的數據&#xff0c;而最直接方便的功能就是篩選。請閱讀下文&#xff0c;了解如何對數據進行篩選。如下圖所示的學生成績中&#xff0c;…