问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

已知二叉树的先序序列,怎么建立二叉树并求其叶子结点和深度???~_百度...

发布网友 发布时间:2024-01-07 04:38

我来回答

2个回答

热心网友 时间:2024-07-27 23:09

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

typedef struct Node

{

char data;

Node*left_tree;

Node*right_tree;

}RootNode;

RootNode*CreateBinTree() //创建二叉树

{

char ch;

scanf("%c",&ch);

if (ch==',')

{

return NULL;

}

RootNode*t=(Node*)malloc(sizeof(Node));

t->data=ch;

t->left_tree=CreateBinTree();

t->right_tree=CreateBinTree();

return t;

}

void InTraBinTree(RootNode*T) //中序遍历二叉树

{

if (NULL!=T->left_tree)

{

InTraBinTree(T->left_tree);

}

printf("%c",T->data);

if (NULL!=T->right_tree)

{

InTraBinTree(T->right_tree);

}

}

void PoTraBinTree(RootNode*T) //后序遍历二叉树

{

if (NULL!=T->left_tree)

{

InTraBinTree(T->left_tree);

}

if (NULL!=T->right_tree)

{

InTraBinTree(T->right_tree);

}

printf("%c",T->data);

}

int GetLeavesCounts(RootNode*T) //获得叶子结点个数

{

int counts=0; //记录叶子结点个数

if (NULL==T->left_tree && NULL==T->right_tree)

{

return 1;

}

if (NULL!=T->left_tree)

{

counts+=GetLeavesCounts(T->left_tree);

}

if (NULL!=T->right_tree)

{

counts+=GetLeavesCounts(T->right_tree);

}

return counts;

}

int GetBinTreeDeep(RootNode*T) //获得二叉树深度

{

if (NULL==T->left_tree && NULL==T->right_tree)

{

return 1;

}

int left_deep=0,right_deep=0;

if (NULL!=T->left_tree)

{

left_deep=GetBinTreeDeep(T->left_tree); //获得左子树的深度

}

if (NULL!=T->right_tree)

{

right_deep=GetBinTreeDeep(T->right_tree); //获得右子树的深度

}

if (left_deep>right_deep)

{

return left_deep+1;

}

return right_deep+1;

}

void DestroyBinTree(RootNode*T) //销毁二叉树

{

if (NULL==T->left_tree && NULL==T->right_tree)

{

free(T);

return;

}

if (NULL!=T->left_tree)

{

DestroyBinTree(T->left_tree);

}

if (NULL!=T->right_tree)

{

DestroyBinTree(T->right_tree);

}

free(T);

}

void main()

{

system("color 0a");

printf("输入一个长度小于50个字符的字符串:");

RootNode*BinTree=CreateBinTree(); //创建二叉树

InTraBinTree(BinTree); //中序遍历

printf("\n");

PoTraBinTree(BinTree); //后序遍历

printf("\n");

printf("%d\n",GetLeavesCounts(BinTree)); //输出叶子结点个数

printf("%d\n",GetBinTreeDeep(BinTree)); //输出二叉树深度

DestroyBinTree(BinTree); //销毁二叉树

system("pause");

}

专门为你编的,若还有疑问请加QQ:2609135351

热心网友 时间:2024-07-27 23:14

谭浩忠的书比较好、。易懂。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我家露台新买的塑料大花盆,想花盆时间耐久,咨询可有材料什么油漆类或涂... 和已婚情人分手了。我把他的微信删了,他没有删我的。而且也没有发动态... 和同事情人分手后,我删了他微信,现在复合了,他没加我,悬什么意思?我加... 好朋友的前任是个什么样的人? 难忘的校园生活 作文不少于600字 以记叙为主,其它格式不限 特色养殖和普通养殖哪个更有发展前景 什么养殖业最赚钱 特种动物养殖专业就业方向与就业前景怎么样 特种动物养殖专业的就业问题有哪些? 特种动物养殖专业就业前景及方向 c1驾驶证年审流程外地可以年审吗? 380V是怎样变成220V的呢? 哪个属于计算机的输出设备 谁了解太空侠奶瓶质量可信吗? 什么是咖啡椅咖啡椅价格 冬季养生保健小常识有哪些 夫妻宫有痣需要点掉吗 00330开头的电话是哪里的 皮肤不白不黑 头发染什么颜色自然 GAMBIT中怎么隐藏网格? 大邑车站到彭州的客车都是几点发车 CBA仅5大神做到,易建联巅峰15年,连庄mvp究竟有多难? 太空侠靠谱吗? 如何一年内强制二次修改? “证人证言”怎么写 如何一年内强制二次修改? 在NBA想要连续2年拿到MVP,难度有多大? 太空侠奶瓶和优可倍奶瓶哪个好 手机在进行第一次充电的时候,电源插头松了松,停了一下,然后又继续充电... 修改一年内如何二次修改吗苹果 修改一年内如何二次修改吗苹果 王字加部首组成什么字 像我的野蛮女友里 i believe那样的歌曲,大家推荐一下。。。 想知道: 成都市 从大邑客运中心到彭县站怎么坐公交 一年之内只能修改两次吗? 属于计算机输出设备的是 ...皮肤不是很黑也不白。想求教染什么颜色比较显白 一年能改几次 我这是长夫妻宫的痣吗?需要点掉吗? 一年内怎么改第二次 y=根号下2^x求定义域和值域 一个手机号注册了两个,前一个登不进去怎么办? 热血传奇手机版为啥面对面交易时太阳水不显示 一年内可以修改几次吗? 一年内怎么改第二次 原子结构模型发展,谁能告诉我!!! 云南安防科技有限公司怎么样 发现老公一个你同事喜欢跟他聊天,声音还时不时的发嗲,我该怎么办? 我的野蛮女友(韩版) 影片结尾全智贤和伯母吃饭餐厅的男声韩语歌 求教... 太空侠奶瓶合格吗?