社区
数据结构与算法
帖子详情
我知道有了一个二叉树先序和中序遍历可以唯一确定一颗二叉树但是.....
drmao
2003-11-01 09:34:03
但是要怎么做才能生成它呢,
比如先序为Pre[n] 中序为Pre[n]
CreatBiTreeFromPreAndIn(,,,,)有谁知道怎么编写呢?
...全文
844
8
打赏
收藏
我知道有了一个二叉树先序和中序遍历可以唯一确定一颗二叉树但是.....
但是要怎么做才能生成它呢, 比如先序为Pre[n] 中序为Pre[n] CreatBiTreeFromPreAndIn(,,,,)有谁知道怎么编写呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
CD2006
2003-11-14
打赏
举报
回复
#include "iostream"
#include "string.h"
using namespace std;
typedef struct BiTree
{
char data;
struct BiTree * lc,* rc;
} BiTree;
const int
StrMax=100;
char * Pre,* In;
void Init(char * Pre,char * In)
{
cout<<"Enter tree's PreOrder: ";
cin>>Pre;
cout<<"Enter tree's InOrder: ";
cin>>In;
}
void create(BiTree * & cur,int left,int right,int & pos)
{
int i;
for(i=left;In[i]!=Pre[pos];i++); //Find out current subtree's root
cur=new BiTree; //Create root
cur->data=Pre[pos];
cur->lc=cur->rc=0;
if(left<=i-1) //Create root's left subtree
{
pos++;
create(cur->lc,left,i-1,pos);
}
if(i+1<=right) //Create root's right subtree
{
pos++;
create(cur->rc,i+1,right,pos);
}
}
void PostOrderPrint(BiTree * cur)
{
if(cur)
{
PostOrderPrint(cur->lc);
PostOrderPrint(cur->rc);
cout<<cur->data<<" ";
}
}
void main(void)
{
BiTree * Tree;
int pos;
void Init(char * Pre,char * In);
void create(BiTree * & cur,int left,int right,int & pos);
void PostOrderPrint(BiTree * cur);
Pre=new char[StrMax];
In=new char[StrMax];
Init(Pre,In);
pos=0;
create(Tree,0,strlen(In)-1,pos);
cout<<"PostOrderTraverse: ";
PostOrderPrint(Tree);
cout<<endl;
}
Riemann
2003-11-09
打赏
举报
回复
http://expert.csdn.net/Expert/topic/2059/2059607.xml?temp=.1657221上有。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 100
typedef struct node
{
char info;
struct node *llink,*rlink;
}TNODE;
char pred[MAX],inod[MAX];
TNODE *restore(char *,char *,int);
void postorder(TNODE *);
main(int argc,char * *argv)
{
TNODE *root;
if(argc<3)
exit(0);
strcpy(pred,argv[1]);
strcpy(inod,argv[2]);
root=restore(pred,inod,strlen(pred));
postorder(roor);
printf("\n\n");
}
TNODE *restore(char *ppos,char *ipos,int n)
{
TNODE *ptr;
char *rpos;
int k;
if(n<=0)
return NULL;
ptr=(TNODE*)malloc(sizeof(TNODE));
ptr->info=*ppos;
for(rpos=inpos;rpos<ipos+n;rpos++)
if(*rpos==*ppos)
break;
k=rpos-ipos;
ptr->llink=restore(ppos+1,ipos,k);
ptr->rlink=restore(ppos+1+k,rpos+1,n-1-k);
return ptr;
}
void postorder(TNODE *ptr)
{
if(ptr==NULL)return;
postorder(ptr->llink);
postorder(ptr->rlink);
printf("%c",ptr->info);
}
drmao
2003-11-02
打赏
举报
回复
太谢谢大家了,我在努力中。
LeeMaRS
2003-11-02
打赏
举报
回复
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=699
看这里, FAQ里面就有了.
CD2006
2003-11-02
打赏
举报
回复
不好意思中午没睡觉,错话连篇:
重来:
a
/ \
b c
/ \ /
e f g
\
h
PreOrderTraverse: abefcgh
InOrderTraverse: ebfaghc
Algorithm:
在前序遍历中,第一个节点a为树根,则在中序中找到a,将中序序列一分为二,
ebf,cgh , ebf显然为左子树的前序遍历,cgh为右子树的前序遍历,
所以在前序序列中可立刻判断bef,ghc分别为左子树和右子树的前序遍历.
设左子树为tree1,右子树为tree2,
问题化归为:已知tree1,tree2的前序,中序遍历,生成tree1,tree2.
对tree1,tree2分别递归调用算法.
CD2006
2003-11-02
打赏
举报
回复
I'm sorry.
I have made a mistake!
InOrderTraverse :ebfaghc
CD2006
2003-11-02
打赏
举报
回复
a
/ \
b c
/ \ /
e f g
\
h
PreOrderTraverse: abefcgh
InOrderTraverse: ebfacgh
Algorithm:
在前序遍历中,第一个节点a为树根,则在中序中找到a,将中序序列一分为二,
ebf,cgh ebf显然为左子树,cgh为右子树,
所以在前序序列中可立刻判断bef,cgh分别为左子树的前序遍历和后序遍历.
设左子树为tree1,右子树为tree2,
问题化归为:已知tree1,tree2的前序,中序遍历,生成tree1,tree2.
对tree1,tree2分别递归调用算法.
dengsf
2003-11-01
打赏
举报
回复
先序序列 的第一个点是树的 根。
在 中序序列 找到这个点,将该点前后的部分分为两段,左边是 左子树 的中序序列,右边是右子树的中序序列。
在 先序序列 里也从左到右分出“相同数目”的两个序列,它们分别是 左右子树 的先序序列。
……
递归思想如上。
【数据结构】
唯一
确定
一个
二叉树
的方法
唯一
确定
一棵
二叉树
的方法 在了解以何种方式能
唯一
确定
一棵
二叉树
之前,需要先认识树的遍历方式有哪几种。 树的遍历方式
先序
遍历 后序遍历 层序遍历
二叉树
的遍历方式
先序
遍历
中序遍历
后序遍历 层序遍历
确定
的方式 那么如何
唯一
确定
一棵
二叉树
呢?这就需要结合
二叉树
的遍历方式来进行,主要有以下两种方式:
二叉树
的
先序
遍历+
中序遍历
二叉树
的后序遍历+
中序遍历
在记忆这两种方式时,为了避免混淆,可以这样记忆:由于
中序遍历
是
二叉树
特有的遍历方式,所有
唯一
确定
一棵
二叉树
的每一种方式中必有
一个
是中序遍
彻底弄懂
二叉树
的
先序
、中序、后序三种遍历与做题
二叉树
二叉树
遍历
二叉树
题目 计算机二级
先序
中序 后序 根
二叉树
的前(先)序中序和后序遍历 以及如何通过两个序列
确定
唯一
二叉树
文章目录三种遍历前(先)序遍历。
中序遍历
。后序遍历。举几个例子两个序列
确定
一个
二叉树
最近做了一套卷子,考了
二叉树
的遍历。有点生疏,回顾一下,如何通过两种遍历序列
确定
一颗
二叉树
。 三种遍历 先中后表示对根节点访问的先后顺序,对子树都是先左后右。 前(先)序遍历。 遍历顺序是 根节点 ->左子树(节点)->右子树(节点) 可以理解成 1 存在根节点,访问根节点 2 存在左子树或节点的...
通过中序和
先序
/后序序列创建
二叉树
在
二叉树
的相关题目中,我们经常会碰到这样的问题,给出
一颗
二叉树
的前序遍历和
中序遍历
,或者是给出它的后序遍历和
中序遍历
,让我们画出这个
二叉树
或者是用代码实现如何用上面两种情况来创建这个
二叉树
。 首先我们来看看给出
先序
遍历序列和
中序遍历
序列如何画出这颗
二叉树
: 首先,
先序
遍历序列中的第
一个
字母肯定是这颗
二叉树
的根节点,然后在
中序遍历
的序列中找到这个根节点,以这个根节点作为分割,在
中序遍历
序列中找到
二叉树
根节点的左右子树。 如下图所示: 接着我们将左子树的
先序
遍历序列和
中序遍历
序列单独拿出来研究,跟上一步一样
已知前序遍历序列和
中序遍历
序列,
确定
唯一
的一棵
二叉树
和后序遍历序列
已知前序遍历序列和
中序遍历
序列,可以
唯一
确定
一棵
二叉树
。 已知后序遍历序列和
中序遍历
序列,可以
唯一
确定
一棵
二叉树
。 但是已知前序遍历序列和后序遍历序列,是不能
确定
一棵
二叉树
的。 下面例子通过前序遍历和
中序遍历
确定
唯一
的一棵
二叉树
。 前序遍历:EACBDGF
中序遍历
:ABCDEFG 1、首先根据前序遍历找出根节点是E,然后根据
中序遍历
可以
知道
ABCD是E的左子树,FG是E的右子树。 ...
数据结构与算法
33,025
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章