日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言二叉树学生成绩,二叉树C语言

發(fā)布時間:2023/12/19 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言二叉树学生成绩,二叉树C语言 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

幾乎報價http://blog.csdn.net/hopeyouknow/article/details/6740616。為了這細微的地方進行了修改。他能夠執(zhí)行。

bitree.h

typedef int Item;

typedef struct node

{

struct node *lchild;

struct node *rchild;

Itemdata;

}BiTNode, *BiTree;

BiTree InitBiTree(BiTNode *root);

BiTNode *MakeNode(Item item, BiTNode *lchild, BiTNode *rchild);

void FreeNode(BiTNode *pnode);

void ClearBiTree(BiTree tree);

void DestroyBiTree(BiTree tree);

int IsEmpty(BiTree tree);

int GetDepth(BiTree tree);

BiTree GetRoot(BiTree tree);

Item GetItem(BiTNode *pnode);

void SetItem(BiTNode *pnode, Item item);

BiTree SetLChild(BiTree parent, BiTree lchild);

BiTree SetRChild(BiTree parent, BiTree rchild);

BiTree GetLchild(BiTree tree);

BiTree GetRchild(BiTree tree);

BiTree InsertChild(BiTree parent, int lr, BiTree child);

void DeleteChild(BiTree parent, int lr);

void PreOrderTraverse(BiTree tree, void (*visit)());

void InOrderTraverse(BiTree tree, void (*visit)());

void PostOrderTraverse(BiTree tree, void (*visit)());

bitree.c

#include "bitree.h"

#include

#include

BiTree InitBiTree(BiTNode *root)

{

BiTree tree = root;

return tree;

}

BiTNode *MakeNode(Item item, BiTNode *lchild, BiTNode *rchild)

{

BiTNode *pnode = (BiTNode *)malloc(sizeof(BiTNode));

if(pnode){

pnode->data = item;

pnode->lchild = lchild;

pnode->rchild = rchild;

}

return pnode;

}

void FreeNode(BiTNode *pnode)

{

if(pnode != NULL)

free(pnode);

}

void ClearBiTree(BiTree tree)

{

BiTNode *pnode = tree;

if(pnode->lchild != NULL)

ClearBiTree(pnode->lchild);

if(pnode->rchild != NULL)

ClearBiTree(pnode->rchild);

FreeNode(pnode);

}

void DestroyBiTree(BiTree tree)

{

if(tree)

ClearBiTree(tree);

}

IsEmpty(BiTree tree)

{

if(tree == NULL)

return 0;

else

return 1;

}

int GetDepth(BiTree tree)

{

int cd, ld, rd;

cd = ld = rd = 0;

if(tree){

ld = GetDepth(tree->lchild);

rd = GetDepth(tree->rchild);

cd = (ld > rd ?

ld : rd);

return cd+1;

}else

return 0;

}

BiTree GetRoor(BiTree tree)

{

return tree;

}

Item GetItem(BiTNode *pnode)

{

return pnode->data;

}

void SetItem(BiTNode *pnode, Item item)

{

pnode->data = item;

}

BiTree SetLChild(BiTree parent, BiTree lchild)

{

parent->lchild = lchild;

return lchild;

}

BiTree SetRChild(BiTree parent, BiTree rchild)

{

parent->rchild = rchild;

return rchild;

}

BiTree GetLchild(BiTree tree)

{

if(tree)

return tree->lchild;

return NULL;

}

BiTree GetRchild(BiTree tree)

{

if(tree)

return tree->rchild;

return NULL;

}

BiTree InsertChild(BiTree parent, int lr, BiTree child)

{

if(parent){

if(lr == 0 && parent->lchild == NULL){

parent->lchild = child;

return child;

}

if(lr == 1 && parent->lchild == NULL){

parent->rchild = child;

return child;

}

}

return NULL;

}

void DeleteChild(BiTree parent, int lr)

{

if(parent){

if(lr == 0 && parent->lchild != NULL){

parent->lchild = NULL;

FreeNode(parent->lchild);

}

if(lr == 1 && parent->rchild != NULL){

parent->rchild = NULL;

FreeNode(parent->rchild);

}

}

}

void PreOrderTraverse(BiTree tree, void (*visit)())

{

BiTNode *pnode = tree;

if(pnode){

visit(pnode->data);

PreOrderTraverse(pnode->lchild, visit);

PreOrderTraverse(pnode->rchild, visit);

}

}

void InOrderTraverse(BiTree tree, void (*visit)())

{

BiTNode *pnode = tree;

if(pnode){

InOrderTraverse(pnode->lchild, visit);

visit(pnode->data);

InOrderTraverse(pnode->lchild, visit);

}

}

void PostOrderTraverse(BiTree tree, void (*visit)())

{

BiTNode *pnode = tree;

if(pnode){

PostOrderTraverse(pnode->lchild, visit);

PostOrderTraverse(pnode->lchild, visit);

visit(pnode->data);

}

}

test.c

#include "bitree.h"

#include

void print(Item item)

{

printf("%d ", item);

}

main()

{

BiTNode *n1 = MakeNode(10, NULL, NULL);

BiTNode *n2 = MakeNode(20, NULL, NULL);

BiTNode *n3 = MakeNode(30, n1, n2);

BiTNode *n4 = MakeNode(40, NULL, NULL);

BiTNode *n5 = MakeNode(50, NULL, NULL);

BiTNode *n6 = MakeNode(60, n4, n5);

BiTNode *n7 = MakeNode(70, NULL, NULL);

BiTree tree = InitBiTree(n7);

SetLChild(tree, n3);

SetRChild(tree, n6);

printf("the depth of the tree is %d.

", GetDepth(tree));

printf("preorderTraverse:

");

PreOrderTraverse(tree, print);

putchar('

');

printf("inorderTraverse:

");

InOrderTraverse(tree, print);

putchar('

');

printf("postorderTraverse:

");

PostOrderTraverse(tree, print);

putchar('

');

DeleteChild(tree, 1);

printf("postorderTraverse:

");

PostOrderTraverse(tree, print);

DestroyBiTree(tree);

if(IsEmpty(tree))

printf("the tree is empty!

");

return 0;

}編譯:gcc test.c bitree.c

執(zhí)行:./a.out

執(zhí)行結果:

the depth of the tree is 3.

preorderTraverse:

70 30 10 20 60 40 50

inorderTraverse:

10 30 10 70 10 30 10

postorderTraverse:

10 10 30 10 10 30 70

postorderTraverse:

10 10 30 10 10 30 70

the tree is empty!

版權聲明:本文博客原創(chuàng)文章,博客,未經同意,不得轉載。

總結

以上是生活随笔為你收集整理的c语言二叉树学生成绩,二叉树C语言的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。