【C++】满二叉树问题

复制代码
/*
给出一棵满二叉树的先序遍历,有两种节点:字母节点(A-Z,无重复)和空节点(#)。要求这个树的中序遍历。输出中序遍历时不需要输出#。
满二叉树的层数n满足1<=n<=5。

Sample Input:
ABC#D#E

Sample Output:
CBADE
*/
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
using namespace std;
const int M=1024;
char data[M];
int layer;

struct node
{
    char data;
    struct node *l;
    struct node *r;
};

void build(node * & t,int l)
{
    if(l>layer)
        return ;
    int i=0;
    while(data[i]=='\0')
        i++;
    char tc=data[i];
    
    //cout<<i<<endl<<tc<<endl;
    
    data[i]='\0';
    if(tc=='#')
    {
        t=NULL;
        return ;
    }
    t=new node();
    t->data=tc;
    build(t->l,l+1);
    build(t->r,l+1);
}

void display(node *t)
{
    if(t==NULL)
        return ;
    display(t->l);
    printf("%c",t->data);
    display(t->r);
}

int main()
{
    /*
    printf("%d\n",(int)(log(8)/log(2)));
    printf("%f\n",(log(7)/log(2)));
    */
    memset(data,'\0',sizeof(data));
    while(scanf("%s",&data))
    {
        //printf("%s\n",data);
        int n=strlen(data)+1;
        /*
        if(log(n)/log(2)>(int)(log(n)/log(2)))
            layer=(int)(log(n)/log(2))+1;
        else*/
            layer=(int)(log(n)/log(2));
        //printf("%d\n",layer);
        node *tree;
        build(tree,1);
        display(tree);
    }
    
    return 0;
}
复制代码

 

 

tz@HZAU

2019/3/13

posted on   tuzhuo  阅读(291)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示