社区
数据结构与算法
帖子详情
根据已知序列生成二叉树的问题
windfast_2000
2002-06-12 10:57:42
已知两个序列
后序:如 abcd-*+ef/-
中序:如 a+b*c-d-e/f
问题:如何根据这两个序列判断各元素在二叉树中的位置,从而生成这个二叉树.
知道的师兄帮忙回答一下,必当重谢!
...全文
110
6
打赏
收藏
根据已知序列生成二叉树的问题
已知两个序列 后序:如 abcd-*+ef/- 中序:如 a+b*c-d-e/f 问题:如何根据这两个序列判断各元素在二叉树中的位置,从而生成这个二叉树. 知道的师兄帮忙回答一下,必当重谢!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
windfast_2000
2002-06-14
打赏
举报
回复
不是标准的无所谓,我想知道些有新意的东西。
leopro
2002-06-14
打赏
举报
回复
建议以后提问前先搜索相关的主题
有些以前就解决了的问题,还是不要提了
这样的话,既可以节约自己的积分,也不会耽误别人的时间
以前有篇帖子,源码都有了
http://www.csdn.net/expert/topic/752/752530.xml?temp=.2101404
已知前序和中序,你改一改就行了
下面是 hannibalhontani(红冰)提供的程序(算法说明我已在上述帖子中说过了)
template <class Entry>
Binary_node<Entry>* Binary_tree<Entry>::recursive_pre_mid_creat (char* pre,char* mid,
int pre_i,int mid_i,
int length)
{
int i=0;
Binary_node<Entry>* sub_root;
if (length<=0)
return NULL;
while (i<length&&pre[pre_i]!=mid[mid_i+i])
i++;
sub_root=new Binary_node<Entry>;
sub_root->data=pre[pre_i];
sub_root->left=recursive_pre_mid_creat (pre,mid,pre_i+1,mid_i,i);
sub_root->right=recursive_pre_mid_creat (pre,mid,pre_i+i+1,mid_i+i+1,length-i-1);
return sub_root;
}
template <class Entry>
void Binary_tree<Entry>::pre_mid_creat (char* pre,char* mid,
int pre_i,int mid_i,
int length)
{
root=recursive_pre_mid_creat (pre,mid,pre_i,mid_i,length);
}
LeeMaRS
2002-06-13
打赏
举报
回复
此方法即标准方法.
windfast_2000
2002-06-13
打赏
举报
回复
To: ynli2002(阿男)
果然很巧妙!
我试一试,没问题就给你加分。
其他师兄还有别的方法么?
ynli2002
2002-06-13
打赏
举报
回复
后序:如 abcd-*+ef/-
中序:如 a+b*c-d-e/f
具体步骤如下
1。后序中最后一个元素为“-“,把它设为根节点
2。在中序中找出该元素,以该元素为界线分两部分,即a+b*c-d与e/f
3。各部分执行如下操作
3.1 在后序中找出a+b*c-d对应的最后一个元素,把它设为左子树根节点,即“+“
3.2 在后序中找出e/f对应的最后一个元素,把它设为右子树根节点,即“/”
4。返回操作3,当没有元素时退出来
leopro
2002-06-13
打赏
举报
回复
搜索以前的帖子吧,流程和程序都给出来了
已知
二叉树
的中序与后序排列求
二叉树
的先序排列
已知
二叉树
的中序与后序排列求
二叉树
的先序排列
已知
二叉树
前序和中序,求后序
public class SubTree { /** *
已知
二叉树
前序和中序,求后序 * @param pre * @param mid * @param last * @param i */ public static int i =0;//i:表示要插入后序
序列
的位置对于
生成
的后序
序列
,应该从最后位置开始写, // 所以在main中将值赋成mid.length-1。这里将i定义成全局变量,是因为如果
序列
长度为1时, // i--无法返回i的值,暂时没有想到其它方法。Integer已经试过,不行。 public void getLast(char[] pre, char[] mid, char[] last){ if(pre.length<=1){//如果
序列
的长度小于等于1,将该
序列
中的元素插入last
序列
,然后返回 last[i]=pre[0]; System.out.println(i); i--; return; } else{//如果
序列
长度大于1,则将
二叉树
的根插入last
序列
,然后将
序列
分成两个,分别进行递归
数据结构实验资料
二叉树
的建立和遍历
本课程实验采用实验教学和学生实验相结合方式,使学生掌握数据结构的基本原理和编程方法,达到提高学生分析
问题
和解决
问题
的能力的目的。
东大22春《数据结构Ⅱ》在线平时作业1-00001
1.用二叉链表表示具有n个结点的
二叉树
时,值为空的指针域的个数为2.
已知
含10个结点的二叉排序树是一棵完全
二叉树
,则该二叉排序树在等概率情况下查找成功的平均查找长度等于3.对长度为n的关键字
序列
进行堆排序的空间复杂度为4.
已知
含6个顶点(v0,v1,v2,v3,v4,v5)的无向图的邻接矩阵如图所示,则从顶点v0出发进行深度优先遍历可能得到的顶点访问
序列
为5.n个顶点的有向完全图中含有向边的数目最多为6.在以单链表为存储结构的线性表中,数据元素之间的逻辑关系用7.倒排文件的主要优点是8.
已知
二叉树
的先序
序列
为ABDECF,中序
序列
为DBEAFC,则后序
序列
为9.若以1234作为双端队列的输入
序列
,则既不能由输入受限的双端队列得到,也不能由输出受限的双端队列得到的输出
序列
是10.
已知
循环队列的存储空间为数组data[21],且当前队列的头指针和尾指针的值分别为8和3,则该队列的当前长度为11.一棵具有 n个结点的完全
二叉树
的树高度(深度)是12.在图采用邻接表存储时,求最小
生成
树的 Prim 算法的时间复杂度为13.
已知
广义表LS=((a,b,c),(d,e,f)),运算head和tai
遍历
序列
生成
二叉树
二叉树
的遍历方式有多种,常见的包括前序遍历、中序遍历、后序遍历和层序遍历。然而,仅依靠一棵
二叉树
的某一种遍历
序列
,是不能唯一确定这棵
二叉树
的具体形态的。这是因为不同形态的
二叉树
可能会产生相同的某一种遍历
序列
。例如,一棵只有左子树的
二叉树
和一棵只有右子树的
二叉树
,它们的前序遍历
序列
可能是一样的(都是先访问根节点,然后依次访问左子树或右子树的节点)。通过以上三种组合(前序 + 中序、后序 + 中序、层序 + 中序)的遍历
序列
,就可以唯一确定一棵
二叉树
的具体形态。
数据结构与算法
33,027
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章