数据结构递增有序输出二叉树叶子结点

【问题描述】按先序次序建立一棵二叉树,按结点的值递增有序输出二叉树所有叶子结点

img

【输入形式】
【输出形式】
【样例输入】abd##e##cf#gh##i###

【样例输出】dehi

【样例说明】
【评分标准】


#include<iostream>
using namespace std;
typedef struct BiTNode
{
    char data;
    struct BiTNode *lchild,*rchild; 
}BiTNode,*BiTree;
void InitTree(BiTree &T)
{
    T=NULL;
}
void creat(BiTree &T)
{
    char ch;
    cin>>ch;
    if(ch=='#')
        T=NULL;
    else
    {
        T=new BiTNode;
        T->data=ch;
        creat(T->lchild);
        creat(T->rchild);
    }
}
char a[100];
int len=0;
void preorder(BiTree T)
{
    if(T)
    {
        if(T->lchild==NULL&&T->rchild==NULL)
        {
            a[len]=T->data;
            len++;
        }
        preorder(T->lchild);
        preorder(T->rchild);
    }
}
int main()
{
    BiTree T;
    InitTree(T);
    creat(T);
    preorder(T);
    char t;
    for(int i=0;i<len;i++)
    {
        for(int j=0;j<len-i;j++)
        {
            if(a[j]>a[j+1])
            {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    }
    for(int k=0;k<=len;k++)
        cout<<a[k];
    return 0;
}

img


输出显示格式错误是为什么

第51行: for(int j=0;j<len-i;j++) 修改为:for (int j = 0; j < len - i - 1; j++),供参考:

#include<iostream>
using namespace std;
typedef struct BiTNode
{
    char data;
    struct BiTNode* lchild, * rchild;
}BiTNode, * BiTree;
void InitTree(BiTree& T)
{
    T = NULL;
}
void creat(BiTree& T)
{
    char ch;
    cin >> ch;
    if (ch == '#')
        T = NULL;
    else
    {
        T = new BiTNode;
        T->data = ch;
        creat(T->lchild);
        creat(T->rchild);
    }
}
char a[100];
int len = 0;
void preorder(BiTree T)
{
    if (T)
    {
        if (T->lchild == NULL && T->rchild == NULL)
        {
            a[len] = T->data;
            len++;
        }
        preorder(T->lchild);
        preorder(T->rchild);
    }
}
int main()
{
    BiTree T;
    InitTree(T);
    creat(T);
    preorder(T);
    char t;
    for (int i = 0; i < len - 1; i++)   //for (int i = 0; i < len; i++)
    {
        for (int j = 0; j < len - i - 1; j++)  //for (int j = 0; j < len - i; j++) 修改
        {
            if (a[j] > a[j + 1])
            {
                t = a[j];
                a[j] = a[j + 1];
                a[j + 1] = t;
            }
        }
    }
    for (int k = 0; k < len; k++)   //for (int k = 0; k <= len; k++)
        cout << a[k];
    return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^