为了账号安全,请及时绑定邮箱和手机立即绑定

求解,(二叉树)怎么样在这个c语言中加入输出一个从左到右遍历的序列的功能

求解,(二叉树)怎么样在这个c语言中加入输出一个从左到右遍历的序列的功能

cljy 2017-10-28 20:50:41
#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct bitnode{    char data;    //结点数据    struct node *Lchild;    //左孩子    struct node *Rchild;    //右孩子}tree;   //结点int  Lchild_len(char insequence[10],char root_data) //得到左孩子的长度{    int len=strlen(insequence);    int i=0;    int sum=0;  //记录左孩子长度    while(insequence[i]!=root_data)    {        i++;        sum++;    }    return sum;}int Rchild_len(char insequence[10],char root_data)  //得到右孩子的长度{    int i=0;    int sum=0;   //记录右孩子长度    while(insequence[i]!='\0'&&insequence[i++]!=root_data);    while(insequence[i]!='\0')    {        sum++;        i++;    }    return sum;}tree* create_tree(char presequence[10],char insequence[10]) //创建二叉树{    tree* temp=(tree*)malloc(sizeof(tree));   //创建结点    int L_len,R_len;      //储存左右孩子长度    char L_presequence[10],L_insequece[10];   //创建左孩子时传入的左孩子的前序串和中序串    char R_presequence[10],R_insequece[10];   //创建右孩子时传入的右孩子的前序串和中序串    L_presequence[0]=L_insequece[0]=R_presequence[0]=R_insequece[0]='\0';    if(strlen(presequence)!=0&&strlen(insequence)!=0)  //传入的序列串非空    {        temp->data=presequence[0];     //根结点数据赋值        L_len=Lchild_len(insequence,presequence[0]);  //获得孩子的长度        R_len=Rchild_len(insequence,presequence[0]);        strncpy(L_presequence,presequence+1,L_len);    //得到要递归创建孩子时要传入的前序遍历串和中序遍历串        *(L_presequence+L_len)='\0';              //字符串末尾加上'\0'        strncpy(R_presequence,presequence+L_len+1,R_len);        *(R_presequence+R_len)='\0';        strncpy(L_insequece,insequence,L_len);        *(L_insequece+L_len)='\0';        strncpy(R_insequece,insequence+L_len+1,R_len);        *(R_insequece+R_len)='\0';        temp->Lchild=create_tree(L_presequence,L_insequece);   //递归创建左子树        temp->Rchild=create_tree(R_presequence,R_insequece);   //递归创建右子树        return temp;    //返回结点地址    }    else    //若根结点无孩子,则返回空指针    {        return NULL;    }}int main(){    char presequence[10];  //存先序序列    char insequence[10];   //存中序序列    tree *root;    scanf("%s",presequence);    scanf("%s",insequence);    root=create_tree(presequence,insequence);    levelorder(root);    printf("\n");}
查看完整描述

1 回答

?
kevinZee

TA贡献50条经验 获得超39个赞

你这个代码看的太累了我就不看了,反正遍历最简单的无非就是一个递归

结束条件是执行到叶结点(生成树的时候置为NULL)

void traverse(tree t){
    if(t == NULL){ return; }
    //TODO : 在此处进行当前结点的一些你想要的操作(前序遍历)
    doSth(t);
    traverse(t->lchild);
    traverse(t->rchild);
}


查看完整回答
反对 回复 2017-10-28
  • cljy
    cljy
    可以帮忙看看我另一个问题吗??
  • 1 回答
  • 0 关注
  • 1804 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信