社区
数据结构与算法
帖子详情
根据已知序列生成二叉树的问题
windfast_2000
2002-06-12 10:57:42
已知两个序列
后序:如 abcd-*+ef/-
中序:如 a+b*c-d-e/f
问题:如何根据这两个序列判断各元素在二叉树中的位置,从而生成这个二叉树.
知道的师兄帮忙回答一下,必当重谢!
...全文
124
6
打赏
收藏
根据已知序列生成二叉树的问题
已知两个序列 后序:如 abcd-*+ef/- 中序:如 a+b*c-d-e/f 问题:如何根据这两个序列判断各元素在二叉树中的位置,从而生成这个二叉树. 知道的师兄帮忙回答一下,必当重谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
遍历
序列
生成
二叉树
二叉树
的遍历方式有多种,常见的包括前序遍历、中序遍历、后序遍历和层序遍历。然而,仅依靠一棵
二叉树
的某一种遍历
序列
,是不能唯一确定这棵
二叉树
的具体形态的。这是因为不同形态的
二叉树
可能会产生相同的某一种遍历
序列
。例如,一棵只有左子树的
二叉树
和一棵只有右子树的
二叉树
,它们的前序遍历
序列
可能是一样的(都是先访问根节点,然后依次访问左子树或右子树的节点)。通过以上三种组合(前序 + 中序、后序 + 中序、层序 + 中序)的遍历
序列
,就可以唯一确定一棵
二叉树
的具体形态。
四种根据给定遍历
序列
构造
二叉树
总结(JAVA递归和非递归版)
构造
二叉树
从前序与中序遍历
序列
构造
二叉树
根据先序遍历构造二叉搜索树从中序与后序遍历
序列
构造
二叉树
从前序与后序遍历
序列
构造
二叉树
如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片
生成
一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与...
数据结构与算法
33,028
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章