二叉树的创建和文本显示

一、题目
编一个程序,读入先序遍历字符串,根据此字符串建立一棵二叉树(以指针方式存储)。

二、分析
首先根据先序遍历,用链表的存储方式,创建一棵二叉链表数。
然后控制格式进行输出即可。其实题目中的输出格式,便是二叉树根据“右”、“根”、“左”这样的次序,然后空格数就是深度乘以4。
细观察输出的格式,,右、根、左。
然后找到相应的解决措施。
二叉树的大部分算法都基于遍历的积除上。

三、算法实现
(主要代码)

typedef struct tree
{
    char data[5];
    struct tree*ld,*rd;
}*Tree;
char s[100][5];
int n,k;
void xiu(char *str)//修改一下,便于先序创建二叉树
{
    int i,j,flag;
    for(i=0; str[i];)
    {
        flag=j=0;
        while(str[i]!=' '&&str[i]!='\0')
        {
            flag=1;
            s[n][j++]=str[i];
            i++;
        }
        if(flag==1)
        {
            s[n][j]='\0';
            n++;
        }
        else
            i++;
    }
}
 
void creat(Tree &T)//先序递归创建二叉树
{
    if(k<n)//递归出口
    {
        if(s[k][0]=='#')
        {
            T=NULL;
            k++;
        }
        else
        {
            T=(Tree)malloc(sizeof(struct tree));
            strcpy(T->data,s[k++]);
            creat(T->ld);
            creat(T->rd);
        }
 
    }
}
 
void display(Tree T,int depth)//格式输出,右、根、左。
{
    if(T)
    {
        display(T->rd,depth+1);
        int cnt=depth*4;
        for(int i=0; i<cnt; i++)
          printf(" ");
        printf("%s\n",T->data);
        display(T->ld,depth+1);
    }
}
int main()
{
    Tree T=NULL;
    char str[110];
    while(gets(str))
    {
        if(s[0]=='\0')
            break;
        n=k=0;
        xiu(str);
        creat(T);
        display(T,0);
        printf("\n");
        T=NULL;
    }
    return 0;
}

四、算法分析
算法分析:先是修改函数O(N),然后递归创建O(logN),然后递归输出,O(logN),故其时间复杂度为O(N)。
空间复杂度为:调用了栈空间O(logN),然后数组O(N),故为O(N)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值