【问题描述】按先序次序建立一棵二叉树,按结点的值递增有序输出二叉树所有叶子结点
【输入形式】
【输出形式】
【样例输入】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;
}
第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;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:main.c中:
printf("销毁链表\n");
//DestroyList1(L); //一级指针方式销毁链表,失败,且出现满屏乱码
DestroyList2(&L); //二级指针方式销毁链表,成功