typedef struct node
{ ElemType data
struct node *lchild,*rchild
} BTNode
//创建一个二叉树;
void CreateBTNode(BTNode * &b,char *str)
{ BTNode *St[MaxSize],*p=NULL
int top=-1,k,j=0
char ch
b=NULL //建立的二叉树初始时为空
ch=str[j]
while (ch!='\0') //str未扫描完时循环
{ switch(ch)
{
case '(':top++St[top]=pk=1break
//为左孩子结点
case ')':top--break
case ',':k=2break
//为孩子结点右结点
default:
p=(BTNode *)malloc(sizeof(BTNode))
p->data=chp->lchild=p->rchild=NULL
if (b==NULL) ///p为二叉树的根结点
b=p
else //已建立二叉树根结点
{ switch(k)
{
case 1:St[top]->lchild=pbreak
case 2:St[top]->rchild=pbreak
}
}
}
j++ch=str[j]
}
}
//中序遍历输出;
void InOrder(BTNode *b)
{ if (b!=NULL)
{ InOrder(b->lchild)
printf("%c ",b->data)//访问根结点
InOrder(b->rchild)
}
}
OK!
顺便发一份给你,注意接收!
#include<stdio.h>typedef char TElemType
typedef struct BiTNode /*结点定义*/
{
TElemType data
struct BiTNode *lchild
struct BiTNode *rchild
}BiTNode,*BiTree
BiTNode *CreateBiTree()
{
char c
BiTNode *Root
scanf("%c",&c)
if(c=='@') Root=NULL
else{
Root=(BiTNode *)malloc(sizeof(BiTNode))
Root->data=c
Root->lchild=CreateBiTree()
Root->rchild=CreateBiTree()
}
return(Root)
}
void PrintTree(BiTree T,int h)
{
int i
if (T){
PrintTree(T->rchild,h+1)
for(i=0i<hi++) printf(" ")
printf("%c\n",T->data)
PrintTree(T->lchild,h+1)
}
}
main( )
{
BiTNode* Root
Root=CreateBiTree()
PrintTree(Root,0)
return 0
}
以下代码可实现二叉树的递归创建与中序遍历,但在输入时需在输入完有效数据后再连续输入多个负数才可以。#include <stdio.h>
#include <stdlib.h>
typedef struct BitNode
{
int data
struct BitNode *lchile,*rchild
}*BiTree
BiTree CreateBiTree(BiTree &T)
{
int d
scanf("%d",&d)
if (d<0)
return NULL
else
{
if (!(T=(BiTree)malloc(sizeof(BiTree))))
{
exit(1)
}
T->data=d//先根序创建二叉树
printf("%d ",T->data)
T->lchile=CreateBiTree(T->lchile)//创建左子树
T->rchild=CreateBiTree(T->rchild)//创建右子树
return T
}
}
void InOrderView(BiTree &T)//中序遍历二叉树
{
if(T)
{
InOrderView(T->lchile)
printf("%d ",T->data)
InOrderView(T->rchild)
}
}
void main()
{
BiTree T
T=CreateBiTree(T)//递归创建二叉树
InOrderView(T)
}