用c语言实现基本数据结构(二叉树)
二叉树有两种表示方法,一种是顺序存储,一种是链式存储。顺序存储比较简单,就没写了(其实都比较简单的:- ) ) 。
这次直接放完整代码
#include <stdio.h>
#include <stdlib.h>
typedef struct BTree{
struct BTree* LChild;
int data;
struct BTree* RChild;
}BTNode;
//输入数据,返回一个节点
BTNode* CreateNode(int data){
BTNode * Node = (BTNode *)malloc(sizeof(Node));
Node->data = data;
Node->LChild = NULL;
Node->RChild = NULL;
return Node;
}
//先序遍历, visit为函数指针
void PreOrderBTree(BTNode *BTree, void (*visit)(BTNode *BTree)){
if(BTree != NULL){
visit(BTree);
PreOrderBTree(BTree->LChild, visit);
PreOrderBTree(BTree->RChild, visit);
}
}
//中序遍历
void InOrderBTree(BTNode *BTree, void (*visit)(BTNode *BTree)){
if(BTree != NULL){
InOrderBTree(BTree->LChild, visit);
visit(BTree);
InOrderBTree(BTree->RChild, visit);
}
}
//后序遍历
void PostOrderBTree(BTNode *BTree, void (*visit)(BTNode *BTree)){
if(BTree != NULL){
PostOrderBTree(BTree->LChild, visit);
PostOrderBTree(BTree->RChild, visit);
visit(BTree);
}
}
测试代码如下
#include"myTree.h"
void PrintNode(BTNode *node){
printf("%d ", node->data);
}
int main(){
BTNode *tree = CreateNode(10);
printf("---------\n");
BTNode *p;
p = tree;
tree->LChild = CreateNode(20);
tree->RChild = CreateNode(30);
p = p->RChild;
p->LChild = CreateNode(40);
p->RChild = CreateNode(50);
p = p->LChild;
p->LChild = CreateNode(60);
printf("---------\n");
PreOrderBTree(tree, &PrintNode);
printf("\n");
InOrderBTree(tree, &PrintNode);
printf("\n");
PostOrderBTree(tree, &PrintNode);
printf("\n");
return 0;
}