数据结构 如何创建一棵树,请给出c语言详细代码,谢谢

Python015

数据结构 如何创建一棵树,请给出c语言详细代码,谢谢,第1张

刚刚回答了一个类似的问题,以下代码供参考:

#include "stdio.h"

#include "stdlib.h"

#define OK 1

#define ERROR 0

#define OVERFLOW -2

typedef char TElemType

typedef int Status

typedef struct BiTNode { // 结点结构

TElemType data

struct BiTNode *lchild, *rchild

// 左右孩子指针

} BiTNode, *BiTree

//以下是建立二叉树存储结构,空节点输入作为#结束标识

Status CreateBiTree(BiTree &T) {

//请将该算法补充完整,参见第6章课件算法或课本

char ch

scanf("%c",&ch)

if(ch=='#') T=NULL

else{

if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))

exit(OVERFLOW)

T->data=ch

CreateBiTree(T->lchild)

CreateBiTree(T->rchild)

}

return OK

} // CreateBiTree

void Preorder(BiTree T)

{

if(T)

{

printf("%c",T->data)

Preorder(T->lchild)

Preorder(T->rchild)

}

}

void Inorder(BiTree T)

{ // 中序遍历二叉树

//请将该算法补充完整,参见第6章课件算法

if(T)

{

Inorder(T->lchild)

printf("%c",T->data)

Inorder(T->rchild)

}

}

void Postorder(BiTree T)

{ // 后序遍历二叉树

//请将该算法补充完整,参见第6章课件算法

if(T)

{

Postorder(T->lchild)

Postorder(T->rchild)

printf("%c",T->data)

}

}

//以下是求叶子结点数

void CountLeaf(BiTree T,int&count){

//请将该算法补充完整,参见第6章课件算法

if(T){

if((!T->lchild)&&(!T->rchild))

count++

CountLeaf(T->lchild,count)

CountLeaf(T->rchild,count)

}

}

//以下是求二叉树的深度

int Depth(BiTree T ){

//请将该算法补充完整,参见第6章课件算法

int depthval,depthLeft,depthRight

if(!T) depthval=0

else{

depthLeft = Depth(T->lchild)

depthRight = Depth(T->rchild)

if(depthLeft>depthRight)depthval = 1+depthLeft

else depthval = 1+depthRight

}

return depthval

}

void main(){

BiTree T

int s=0,d

printf("\n creat of the bitree:\n")

CreateBiTree(T)

printf("\n output result of Preorder:\n")

Preorder(T)

CountLeaf(T,s)

d=Depth(T)

printf("\n leaves=%d\n",s)

printf("\n depth=%d\n",d)

}

刚刚回答了一个类似的问题,以下代码供参考:\x0d\x0a#include "stdio.h"\x0d\x0a#include "stdlib.h"\x0d\x0a#define OK 1\x0d\x0a#define ERROR 0\x0d\x0a#define OVERFLOW -2\x0d\x0a\x0d\x0atypedef char TElemType\x0d\x0atypedef int Status\x0d\x0atypedef struct BiTNode { // 结点结构\x0d\x0a TElemType data\x0d\x0a struct BiTNode *lchild, *rchild\x0d\x0a // 左右孩子指针\x0d\x0a} BiTNode, *BiTree\x0d\x0a\x0d\x0a//以下是建立二叉树存储结构,空节点输入作为#结束标识\x0d\x0aStatus CreateBiTree(BiTree &T) {\x0d\x0a //请将该算法补充完整,参见第6章课件算法或课本\x0d\x0a char ch\x0d\x0a scanf("%c",&ch)\x0d\x0a if(ch=='#') T=NULL\x0d\x0a else{\x0d\x0a if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))\x0d\x0a exit(OVERFLOW)\x0d\x0a T->data=ch\x0d\x0a CreateBiTree(T->lchild)\x0d\x0a CreateBiTree(T->rchild)\x0d\x0a }\x0d\x0a return OK\x0d\x0a\x0d\x0a} // CreateBiTree\x0d\x0avoid Preorder(BiTree T)\x0d\x0a{\x0d\x0a if(T)\x0d\x0a {\x0d\x0a printf("%c",T->data)\x0d\x0a Preorder(T->lchild)\x0d\x0a Preorder(T->rchild)\x0d\x0a } \x0d\x0a} \x0d\x0a\x0d\x0avoid Inorder(BiTree T)\x0d\x0a{ // 中序遍历二叉树 \x0d\x0a //请将该算法补充完整,参见第6章课件算法\x0d\x0a if(T)\x0d\x0a {\x0d\x0a Inorder(T->lchild)\x0d\x0a printf("%c",T->data)\x0d\x0a Inorder(T->rchild)\x0d\x0a }\x0d\x0a}\x0d\x0avoid Postorder(BiTree T)\x0d\x0a{ // 后序遍历二叉树 \x0d\x0a //请将该算法补充完整,参见第6章课件算法\x0d\x0a if(T)\x0d\x0a {\x0d\x0a Postorder(T->lchild)\x0d\x0a Postorder(T->rchild)\x0d\x0a printf("%c",T->data)\x0d\x0a }\x0d\x0a}\x0d\x0a\x0d\x0a//以下是求叶子结点数\x0d\x0avoid CountLeaf(BiTree T,int&count){ \x0d\x0a //请将该算法补充完整,参见第6章课件算法\x0d\x0a if(T){\x0d\x0a if((!T->lchild)&&(!T->rchild))\x0d\x0a count++\x0d\x0a CountLeaf(T->lchild,count)\x0d\x0a CountLeaf(T->rchild,count)\x0d\x0a }\x0d\x0a} \x0d\x0a\x0d\x0a//以下是求二叉树的深度\x0d\x0aint Depth(BiTree T ){\x0d\x0a //请将该算法补充完整,参见第6章课件算法\x0d\x0a int depthval,depthLeft,depthRight\x0d\x0a if(!T) depthval=0\x0d\x0a else{\x0d\x0a depthLeft = Depth(T->lchild)\x0d\x0a depthRight = Depth(T->rchild)\x0d\x0a if(depthLeft>depthRight)depthval = 1+depthLeft\x0d\x0a else depthval = 1+depthRight\x0d\x0a }\x0d\x0a return depthval\x0d\x0a}\x0d\x0a\x0d\x0avoid main(){\x0d\x0a BiTree T\x0d\x0a int s=0,d\x0d\x0a printf("\n creat of the bitree:\n")\x0d\x0a CreateBiTree(T)\x0d\x0a printf("\n output result of Preorder:\n")\x0d\x0a Preorder(T)\x0d\x0a CountLeaf(T,s)\x0d\x0a d=Depth(T)\x0d\x0a printf("\n leaves=%d\n",s)\x0d\x0a printf("\n depth=%d\n",d)\x0d\x0a}

#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

}