根据已知序列生成二叉树的问题

windfast_2000 2002-06-12 10:57:42
已知两个序列
后序:如 abcd-*+ef/-
中序:如 a+b*c-d-e/f

问题:如何根据这两个序列判断各元素在二叉树中的位置,从而生成这个二叉树.

知道的师兄帮忙回答一下,必当重谢!
...全文
101 6 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
搜索以前的帖子吧,流程和程序都给出来了

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧