中易网

C语言二叉树已知前序遍历和中序遍历求后序遍历。只有70行代码,求找错。

答案:2  悬赏:0  
解决时间 2021-02-18 09:37
运行程序后就停止运行了,看了五六遍了,还是找不出。BuildTree函数错了













最佳答案
无需建立二叉树:
1. 获取当前前序序列的第一个元素并输出(按层次遍历)
2. 从对应的中序序列中找到该元素,该元素此时将二分中序序列中的元素
3. 依据划分出的两个序列,在前序序列中找到这两个序列(按照中序中序列的元素个数即可划分)
4. 对划分后的先序序列继续1, 2,3两步(要平行进行不能处理完一个序列再处理另一个序列)直到遍历全部元素,此时得到的序列即为层次遍历序列。
例如: 先序abdecfg, 中序dbeafcg
   按照算法:
1. 输出先序第一个元素a
2. 依据a得到中序划分后的两个序列dbe,fcg,因此此时序列第一个子序列的长度为3
   3.  由于划分后的左序列长度为3,先序中除a以外剩下的元素被划分为bde、cfg
   4.  对先序序列bde和cfg重复上面的步骤,先输出两个序列的先序第一个元素b、c
   5, 从中序序列dbe,fcg得到划分的子序列d、e和f、g,左序列的长度都为1
   6. 因此前序序列被划分为了d、e和f、g四个序列,接着输出d、e、f、g
  因此遍历的序列为abcdefg
全部回答
typedef struct Node { char a; struct Node *lchild; struct Node *rchild; }BiNode, *BiTree; void PosTraverse(BiTree T) { if (T == NULL) return; PosTraverse(T->lchild); PosTraverse(T->rchild); printf("%c", T->a); } void BuildTree(char *pre, char* mid, BiTree root) { int len = strlen(pre); if (0 == len) return; char *p = strchr(mid, pre[0]); int pos = p - mid; root->a = pre[0]; root->lchild = root->rchild = NULL; if (pos != 0) { e5a48de588b67a686964616f31333337373665BiTree left; root->lchild = (BiTree)malloc(sizeof(BiNode)); left = root->lchild; char *left_pre = (char*)malloc(sizeof(char) * (pos + 1)); char *left_mid = (char*)malloc(sizeof(char) * (pos + 1)); strncpy(left_pre, pre + 1, pos); strncpy(left_mid, mid, pos); left_pre[pos] = 0; left_mid[pos] = 0; BuildTree(left_pre, left_mid, left); } if (pos != len - 1) { BiTree right; root->rchild = (BiTree)malloc(sizeof(BiNode)); right = root->rchild; char *right_pre = (char*)malloc(sizeof(char) * (len - pos)); char *right_mid = (char*)malloc(sizeof(char) * (len - pos)); strncpy(right_pre, pre + 1 + pos, len - pos - 1); strncpy(right_mid, mid + 1 + pos, len - pos - 1); right_pre[len - pos - 1] = 0; right_mid[len - pos - 1] = 0; BuildTree(right_pre, right_mid, right); } } int main() { BiNode temp; BuildTree("abcdefg", "cbdafge", &temp); PosTraverse(&temp); }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
利辛县天昱酒店管理有限公司在哪里啊,我有事
公司5月份发年终奖,4月份离职还有没有
以色列的滴灌技术是不是从中国引进的?
哪有卖自慰具
php 命名空间是怎么自动加载的
南宁花雨湖作文
男生有什么优点,我要写作文
求地磅过磅的收费标准。
百果千菜联发江岸汇景店这个地址在什么地方,
有用过bigemap地图下载器的吗,这软件怎么样
1971年7月份到2017年1月份周岁多少
滨州市嘉元投资管理咨询中心在哪里啊,我有事
国三柴油有轻微臭味是怎么回事我的车是电喷的
人民财产保险,快速理赔能给多少
中邮富富余1号两全保险 分红型到期了取得出来
推荐资讯
QQ邮箱怎么注册
广州黄村地铁坐几号线到广州客运站
淘宝店铺怎么我上传500多件商品就上传不了了
十二属相各自的败月
东利星家用电器维修中心在什么地方啊,我要过
已婚女人难找工作吗
安徽芜湖事业编工资高不高
做XRD的话,需要多少样品量
tvb颜值最差的前五位女演员是谁
松树 杨树 柳树 梅花 竹子哪一个不是同一类?
神探夏洛克第二季第一集那个女的最后是没死?
我是专科,学会计专业,我不知道要不要报四级
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?