c语言数据结构:怎么建立一个二叉树?

Python014

c语言数据结构:怎么建立一个二叉树?,第1张

只要将一个二叉树用“括号表示法”表示出来,然后,用链式存储结构将其各个结点存储就可以了,也就是输入一个二叉树。最后,用中序遍历输出!

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)

}