数据结构编程之树的重建题目如下图?
//这个题目挺有意思的,很喜欢,你看看我这个咋样啊?
#include
#include
typedef char ElemType ;
typedef struct node
{
ElemType data ;
struct node *lchild ;
struct node *rchild ;
}BTree,*pBTree ;
//先序创建树
void CreateBTree(pBTree *T)
//此处参数应该用指针的指针,应给它要改变指向二叉树根的那个指针
{
char ch ;
ch=getchar();
getchar(); //得到回车按那个字符
if(ch ==' ') //输入空字符时要打空格
{
(*T) = NULL ;
return ;
}
else
{
if( !( (*T) = (pBTree) malloc(sizeof(BTree)) ) ) return ;
(*T)->data = ch ;
CreateBTree( &(*T)->lchild );
CreateBTree( &(*T)->rchild );
}
}
void BTreePrint(BTree *Tr,int n)
//逆时针旋转90°打印二叉树,n为缩进层数,初始值为0
{
int i;
if(Tr == NULL) return;
BTreePrint(Tr->rchild,n+1);
for(i = 0;i<n;i++)
printf(" ");
if(n >= 0)
{
printf("--");
printf("%c
",Tr->data);
}
BTreePrint(Tr->lchild,n+1);
}
void main()
{
pBTree bTree ;
CreateBTree(&bTree);
BTreePrint(bTree,0);
}
输入举例:建立以A为根B、C分别为左右子树的二叉树!输入格式为:
A 回车!
B 回车!
空格 回车!
空格 回车!
C 回车!
空格 回车!
空格 回车!
加我.我有~
#include "iostream.h"#include "conio.h"
bool ToPreOrder(int InOrder[], int Inlow, int Inhigh,
//InOrder中序序列,Inlow、Inhigh要处理的中序范围
int PostOrder[], int Postlow, int Posthigh,
//PostOrder后序序列,Postlow、Posthigh要处理的后序范围
int PreOrder[], int Prelow, int Prehigh)
//PreOrder存放前序序列的,Prelow、Prehigh存放前序的范围
{
bool lflag = 0, rflag = 0;
if((Inhigh - Inlow) != (Posthigh - Postlow)) //中序序列长度与后序序列长度不相等
return false;
if(((Inhigh - Inlow) == -1) && ((Posthigh - Postlow) == -1)) //空树
return true;
int root = PostOrder[Posthigh], pos;//root是后序中的最后一个,pos表示根在中序中的位置
for(pos = Inlow; pos <= Inhigh; pos++){
if(InOrder[pos] == root) break;
}
if(pos > Inhigh) return false; //如果在中序中没有找到根
PreOrder[Prelow] = root; //先确定前序中的根
lflag = ToPreOrder(InOrder, Inlow, pos - 1,
PostOrder, Postlow, Postlow + pos - Inlow - 1,
PreOrder, Prelow + 1, Prelow + pos - Inlow); //递归处理左子树
rflag = ToPreOrder(InOrder, pos + 1, Inhigh,
PostOrder, Postlow + pos - Inlow, Posthigh - 1,
PreOrder, Prelow + pos - Inlow + 1, Prehigh); //递归处理右子树
return lflag && rflag; //返回处理结果
}
void main()
{
int pre[20], in[20], post[20];
int n;
cin >> n; //输入结点个数
cout << endl;
for(int i = 0; i < n; i++) //输入中序序列
cin >> in[i];
cout << endl;
for(i = 0; i < n; i++) //输入后序序列
cin >> post[i];
cout << endl;
if(!ToPreOrder(in, 0, n - 1, post, 0, n - 1, pre, 0, n - 1))
cout << "-1\n";
else
{
for(i = 0; i < n - 1; i++)
cout << pre[i] << " ";
cout << pre[n - 1];
}
cout << endl;
getch();
}
【Java编程】程序结构--分支
嵌套分支:if...else if...,适合处理逻辑树问题,如比较三个数的大小。多个分支(级联):if...else if...else,处理多个可能的情况,类似switch...case。switch...case结构更为特殊,仅适用于整数比较,根据输入值匹配对应case并执行,必须包含break跳出循环。在编程中,理解并熟练运用这些分支结构...
数据结构是什么?
详情请查看视频回答
c语言的算法有哪些
数据结构相关算法:数据结构如数组、链表、栈、队列等在C语言编程中广泛应用,针对这些数据结构也有相应的算法。例如,对于链表,有插入节点、删除节点等算法;对于栈,有入栈、出栈等算法;对于树结构,有树的遍历、搜索等算法。字符串处理算法:在C语言中处理字符串时,也会涉及到一些特定的算法。例如,...
2008年9月计算机2级C语言
在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。 1.4树与二叉树 考点7 树与二叉树及其基本性质 考试链接: 考点7在笔试考试中,是一个必考的内容,在笔试考试中出现的几率为100%,主要是以选择的形式出现,...
...实验目的] 验证二叉树的链接存储结构及其上的基本操作。(c++...
a、具有n的结点的完全二叉树的深度为log2n+1. 满二叉树是完全二叉树,对于深度为k的满二叉树中结点数量是2k-1 = n,完全二叉树结点数量肯定最多2k-1,同时完全二叉树倒数第二层肯定是满的(倒数第一层有结点,那么倒是第二层序号和满二叉树相同),所以完全二叉树的结点数最少大于少一层的满二叉树,为2k-1-...
C语言面试笔试题
2. 线性结构: 线性表、栈与队列、线性链表都被认为是线性结构,答案是A。3. 完全二叉树: 完全二叉树的特点是除了最后一层外,各层结点数达到最大值,且除最后一层外,任何一层的结点数都达到最大,答案是B,因为完全二叉树可能缺少右边的叶子结点,而不是“若干个”。4. 结构化编程: 结构化程序...
数据结构判断题;在线索二叉树中,依据线索不能一次遍历树中的全部结点...
这个应该是先序线索或者后序线索,中序是可以在线索化的二叉树上双向遍历的 大部分先序线索化二叉树找先序前驱困难,所有的先序线索二叉树可以很方便地找到先序后继,这样往后遍历可以,往前不行 大部分后序线索化二叉树找后序后继困难,所有的后序线索二叉树可以很方便地找到后序前驱,这样往前可以,...
给出用数组描述的栈的存储结构,以及操作
最优二叉树是为了解决特定问题引出的特殊二叉树结构,它的前提是给二叉树的每条边赋予了权值,这样形成的二叉树按权相加之和是最小的。最优二叉树一节,直接考查算法源码的很少,一般是给你一组数据,要求你建立基于这组数据的最优二叉树,并求出其最小权值之和,此类题目不难,属送分题。6.树与森林:二叉树是一种...
新手如何学习编程?
学编程入门建议:1.学编程要从根本出发,从理论上来说,需要广泛的阅读。了解算法的博大精深和计算机的基本理论。2.从实践上来说,需要有广泛的练习,练习的广泛在于练习不同的内容。然后就是创新精神和数学思维能力,这些都是需要培养的。基础要打好学编程要具备一定的基础。3.逻辑思维能力的培养、学...
建筑结构知识:木材有哪些分类
2.4 学名 白梨柴龙树Apodytes dimidiana E.Mey 商品名:穆冈犹讷 Mugonyone;White paer;Pearwood。 俗称:瑞士梨木 木材材性:边材和心材界限不明显,生材颜色由浅白到黄褐色,且带有粉色色调,在空气的作用下变成浅灰褐色;木材纹理直,结构细而均匀;较耐磨;材质硬且较重,气干密度约0.72g\/cm3;各项力学指标中等,...
吴英消炎: 这道题需要采用遍历算法实现,正如你的标题所说,用BFS(广度优先遍历)比较适当.先构建图G=的逻辑关系,图中的结点v表示小镇,图中的边(u, v)表示u、v两个镇的距离小于或等于20km.再构建它的存储结构(可以用邻接矩阵,也可...
桓仁满族自治县13151499396: 一道数据结构的题二叉树的先序遍历和中序遍历如下:先序遍历:EFHIGJK;中序遍历:HFIEJKG .该二叉树根的右子树的根是: - ?
吴英消炎:[答案] 有先序可在,树根为E; 此时由中序可知,做子树节点HFI,右子树节点JKG 有先序FHI和中序HFI可知,左子树根为F,F两边的H和I分别为其左孩子和有孩子,所以左子树为 F H I 同理,右子树为: G J K 此二叉树为 E F G H I J K
桓仁满族自治县13151499396: 数据结构问题:列车调度,树的重建?
吴英消炎: 列车的调度可以考虑使用栈,树的重建明显是考察对树的掌握
桓仁满族自治县13151499396: 数据结构C语言:怎样构造一棵树 - ?
吴英消炎: 首先确定存储结构,比如是双亲表示还是孩子兄弟链表表示或者孩子链表表示 再按此存储结构规则将树中的所有边(结点的关系)输入,就可以将树构造好了
桓仁满族自治县13151499396: 数据结构与算法题目:构建一棵链式表示的二叉树.要求如下: - ?
吴英消炎: struct Tree{ int data; struct Tree *left; struct Tree *right;};void Add2Tree(struct Tree **r, int n){ if ( (*r)==NULL ) { ...
桓仁满族自治县13151499396: 求数据结构 四、应用题1、画出如下图所示的二叉树对应的森林.A/ \B C\ / \D E F/ \ /G H I/ \J K2、对于如下图所示的二叉树,给出它的前序、中序和后序遍历的... - ?
吴英消炎:[答案] 1. A C F / \ / | \ | B D E H K I / G 2. 前序:ABDEHCFI 中序:DBHEACIF 后续:DHEBIFCA 3.不会. 4. 深度优先:V1->V2->V5->V4->V3 广度遍历:V1->V2->V3->V5->V4
桓仁满族自治县13151499396: 用C++语言编写数据结构树的问题?
吴英消炎: #include"stdio.h" int n,tree[100]; void creat()//创建二叉树 { int i=0,j; for(i=0;i<100;i++) tree[i]=-1; printf("input the num of nodes\n"); scanf("%d",&n);//输入节点个数(包括空节点) tree[0]=j=n; printf("input the value of nodes(the ...
桓仁满族自治县13151499396: 求教一个C语言数据结构的编程【Huffman树】 - ?
吴英消炎: 霍夫曼编码问题,和我以前数据结构的一个上机题很类似,不过没有解码功能 上机题:设电文字符集D及各字符出现的概率F如下: D={a,b,c,d,e,f,g,h}(字符数n=8) F={5,29,7,8,14,23,3,11}(%) 编写完成下列功能的程序: ①构造关于F的...
桓仁满族自治县13151499396: 一道C数据结构题目 求大侠 保证加分 加150分?
吴英消炎: 1、问题描述: 建立一棵二叉树,以树的形状输出此二叉树,为一颗躺着的树.输入此树中的一结点x,以二叉树中任意元素值为x的结点为根的子树,输出其深度.2、设计思想: 存储结构:为二叉链表,树中一个节点域包括左孩子指针(lchild...
桓仁满族自治县13151499396: 求解一个数据结构中树的题目 - ?
吴英消炎: 楼主你好,情况是这样的,由于数据结构中对于完全二叉树的定义各个教材可能不一定相同,那我现在以清华大学出版社的为准来说明:分析该题,可见该题有2中可能情况,一种是7层,一种是8层...