69,371
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<stdlib.h>
typedef struct TreeNode* BinTree;
struct TreeNode{
int Data;
BinTree Left;
BinTree Right;
};
void Insert(BinTree* tree, int val); //向二叉树中插入数据
void DelTree(BinTree tree); //释放树节点
void PreOrderTraversal(BinTree tree); //先序遍历
int main(int argc, char* argv[])
{
BinTree tree = NULL;
Insert(&tree, 10);
Insert(&tree,8);
Insert(&tree,11);
Insert(&tree,7);
Insert(&tree,9);
Insert(&tree,15);
PreOrderTraversal(tree);
return 0;
}
void Insert( BinTree* tree, int val)
{
BinTree Temp = NULL; //这是一个零时节点
if(!(*tree)){ //如果树不为空
Temp = (BinTree)malloc(sizeof(struct TreeNode)); //为零时节点申请一个空间,并初始化
Temp->Data = val;
Temp->Left = NULL;
Temp->Right = NULL;
*tree = Temp; //将临时节点挂到树上
}
if(val<(*tree)->Data){ //如果这个数小于当前数,则插入左子树
Insert(&((*tree)->Left),val);
}else if(val>(*tree)->Data){ //如果这个数大于当前数,则插入右子树
Insert(&((*tree)->Right),val);
}
}
void DelTree(BinTree tree) //删除一个树得节点
if(!(*tree)){ //如果树不为空
Temp = (BinTree)malloc(sizeof(struct TreeNode)); //为零时节点申请一个空间,并初始化
Temp->Data = val;
Temp->Left = NULL;
Temp->Right = NULL;
*tree = Temp; //将临时节点挂到树上
}
void DelTree(BinTree tree) //删除一个树得节点
{
if(tree){ //非空才能free
free(tree->Left); //先free左节点,再free右节点,最后free根节点
free(tree->Right);
free(tree);
}
}
void PreOrderTraversal(BinTree tree)
{
if(tree){ //如果这个树不为空,则对他进行先序遍历
printf("%d ",tree->Data);
PreOrderTraversal(tree->Left);
PreOrderTraversal(tree->Right);
}
}