| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3427 人关注过本帖
标题:高手指点一下:已知前序与中序的遍历,递归建树求后序遍历!
取消只看楼主 加入收藏
鬼手刀客
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2008-10-19
结帖率:100%
收藏
 问题点数:0 回复次数:2 
高手指点一下:已知前序与中序的遍历,递归建树求后序遍历!
高手指点一下:已知前序与中序的遍历,递归建树求后序遍历!
主要想问一下递归建左子树与右子树时,参数怎么弄?
搜索更多相关主题的帖子: 遍历 建树 递归 
2008-11-16 20:51
鬼手刀客
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2008-10-19
收藏
得分:0 
谢谢你了!
2008-11-16 22:44
鬼手刀客
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2008-10-19
收藏
得分:0 
编了一下,还是搞不出正确结果....我这人活的太悲哀了
// creattree.c.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#include "string.h"
#define  N  40

typedef  struct node
{
        char    data;
        struct  node  *lchild;
        struct  node  *rchild;
}binnode;
typedef  binnode *bintree;


bintree  creat(char preorde[],char inorde[],int n)
{
        bintree t;
        char lp[N],li[N],rp[N],ri[N];
        int m,i;
        if(n==0)
                return NULL;
        t=(bintree)malloc(sizeof(binnode));
        t->data=preorde[0];
        for(m=0;m<n;m++)
        {
                if(inorde[m]=t->data )
                        break;//m就是根结点在中序的位置
        }
        //得到左子树的前序和中序
        for(i=0;i<m;i++)
                lp=preorde[i+1];
        for(i=0;i<m;i++)
                li=inorde;
        //得到右子树的前序和中序
        for(i=0;i<n-m+1;i++)
                rp=preorde[i+m+1];
        for(i=0;i<n-m+1;i++)
                ri=inorde[i+m+1];

        t->lchild =creat(lp,li,m);
        t->rchild =creat(rp,ri,n-m-1);

        

        return t;

}
void  postorde(bintree t)
{
        if(t)
        {
                postorde(t->lchild );
                postorde(t->rchild );
                printf("%c",t->data );
        }
}
void  preorde1(bintree t)
{
        if(t)
        {
                printf("%c",t->data );
                postorde(t->lchild );
                postorde(t->rchild );
               
        }
}
int main()
{
        char preorde[N],inorde[N];
        bintree t;
        int n;
        printf("请输入二叉树的前序遍历:");
        gets(preorde);
        printf("请输入二叉树的中序遍历:");
        gets(inorde);
        n=strlen(preorde);
        t=creat(preorde,inorde,n);/*建树*/
        printf("二叉树后序遍历:");
        postorde(t);
        printf("\n二叉树前序遍历:");
        preorde1(t);
        getch();
        return 0;
}
2008-11-17 09:01
快速回复:高手指点一下:已知前序与中序的遍历,递归建树求后序遍历!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025174 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved