社区
数据结构与算法
帖子详情
根据已知序列生成二叉树的问题
windfast_2000
2002-06-12 10:57:42
已知两个序列
后序:如 abcd-*+ef/-
中序:如 a+b*c-d-e/f
问题:如何根据这两个序列判断各元素在二叉树中的位置,从而生成这个二叉树.
知道的师兄帮忙回答一下,必当重谢!
...全文
137
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
打赏
举报
回复
搜索以前的帖子吧,流程和程序都给出来了
遍历
序列
生成
二叉树
二叉树
的遍历方式有多种,常见的包括前序遍历、中序遍历、后序遍历和层序遍历。然而,仅依靠一棵
二叉树
的某一种遍历
序列
,是不能唯一确定这棵
二叉树
的具体形态的。这是因为不同形态的
二叉树
可能会产生相同的某一种遍历
序列
。例如,一棵只有左子树的
二叉树
和一棵只有右子树的
二叉树
,它们的前序遍历
序列
可能是一样的(都是先访问根节点,然后依次访问左子树或右子树的节点)。通过以上三种组合(前序 + 中序、后序 + 中序、层序 + 中序)的遍历
序列
,就可以唯一确定一棵
二叉树
的具体形态。
已知
二叉树
先序和中序遍历,
生成
二叉树
参考: 如先序为:abdc,中序为:bdac . 则程序可以求出后序为:dbca 。此种题型也为数据结构常考题型。 算法思想:先序遍历树的规则为中左右,则说明第一个元素必为树的根节点,比如上例 中的a就为根节点,由于中序遍历为:左中右,再根据根节点a,我们就可以知道,左子树包含 元素为:db,右子树包含元素:c,再把后序进行分解为db和c(根被消去了),然后递归的 进行左子树的求解(
根据先序
序列
和中序
序列
生成
二叉树
(Java)
实现思路 在
二叉树
中,有三种主要的遍历方式(假设父节点为N,左孩子为L,右孩子为R): 先序遍历:N -> L -> R 中序遍历:L -> N -> R 后序遍历:L -> R -> N 假设现有一颗
二叉树
如上图所示,上述
二叉树
的先序遍历和中序遍历结果为: 先序遍历:ABCDEF 中序遍历:CBDAEF 分析: 先序遍历服从规则“根左右”,所以,对于一个先序...
数据结构与算法
33,025
社区成员
35,334
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章