头歌两种遍历方法建立一棵树(前序和中序)

///

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include "ConstructTree.h"

/


 

/*

InPreToTree(): 由前序遍历序列和中序遍历序列构造二叉树

前序序列为pa[p1:p2]

中序序列为ia[i1:i2]

返回所构造的二叉树的根指针

*/

TNode* InPreToTree(char *pa, char *ia, int p1, int p2, int i1, int i2)

{

    /*请在BEGIN和END之间实现你的代码*/

    /*****BEGIN*****/

   if(p1>p2){

       return NULL;

   }

   TNode* root=new TNode;

   root->data=pa[p1];//将前序数组中第一个元素赋给data,前序数组第一个值都是根节点。

   root->left=NULL;

   root->right=NULL;

   int i=0;

   while(ia[i]!=pa[p1]){

       i++;

   }//查找根节点在中序数组中的位置。

//递归,每次缩小范围,将树一次一次细分。

   int llen=i-i1;//存储左子树长度

    root->left=InPreToTree(pa,ia,p1+1,p1+llen,i1,i-1);//每个根节点左右子树依次递推下去,双亲和子树的递推方法都是一样的。

    int rlen=i2-i;//存储右子树长度,两个分开存储会更好

    root->right=InPreToTree(pa,ia,p2-rlen+1,p2,i+1,i2);

    return root;

    /******END******/

    /*请不要修改[BEGIN,END]区域外的代码*/

void PrintPostTravel(TNode* t)

{

    if(t==NULL) return;

    if(t->left) PrintPostTravel(t->left);

    if(t->right) PrintPostTravel(t->right);

    printf("%c", t->data);

}

void DeleteTree(TNode* t)

{

    if(t==NULL) return;

    if(t->left) DeleteTree(t->left);

    if(t->right) DeleteTree(t->right);

    delete t;

}

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小A敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值