回复 楼主 zzqqrr
楼主,您可以参考下面的代码:“
程序代码:
#include <stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct BiTreeNode
{
char data;
struct BiTreeNode *lchild,*rchild;
}BTNode;
BTNode *Create_BiTree()//二叉树的建立
{//用辅助数组建立二叉树
int i,j;
char ch;
BTNode *t = NULL;
BTNode *p[MAXSIZE] = {NULL}; // 存放的只不过是指针! SLL, 2011-10-21
printf("输入顶点编号i及信息ch,输入0和#结束:i,ch \n");
scanf("%d,%c",&i,&ch);
while(i==0||ch=='#') break;
while(i!=0&&ch!='#'){ //建立二叉树的存储结构
if (p[i] == NULL)
{
p[i] = (BTNode *)malloc(sizeof(BTNode));
p[i]->lchild = p[i]->rchild=NULL;
}
p[i]->data=ch;
if(i==1) //判断输入结点是根结点、左孩子还是右孩子
{
t = p[i];
}
else
{
j=i/2;
if (p[j] == NULL)
{
p[j] = (BTNode *)malloc(sizeof(BTNode));
p[j]->lchild = p[j]->rchild = NULL;
}
if(i%2==0)
{
p[j]->lchild=p[i]; // SLL, 2011-10-21
}
else
{
p[j]->rchild=p[i];
}
}
printf("输入顶点编号i及信息ch,输入0和#结束:i,ch \n");
scanf("%d,%c",&i,&ch);
}
return t;
}// Create_BiTree
void Inorder(BTNode *bt) //中序递归遍历
{
if(bt)
{
Inorder(bt->lchild);
printf("%c",bt->data);
Inorder(bt->rchild);
}
}//Inorder
int main()
{
BTNode *biTree;
biTree = Create_BiTree();
printf("中序遍历结果:\n");
Inorder(biTree);
printf("\n");
return 0;
}
”
注:实际上,您和网友“Heart→M鹏”的问题是一样的:
https://bbs.bccn.net/viewthread.php?tid=344651&page=1#pid2024749
程序运行结果见附件
;
注2:输入数据时,节点号和节点值之间用且只用“,”分割。
[
本帖最后由 leizisdu 于 2011-11-5 20:17 编辑 ]