博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于树的基础操作
阅读量:7233 次
发布时间:2019-06-29

本文共 4010 字,大约阅读时间需要 13 分钟。

树的基本操作

注意:

本文涉及大量的二级指针,如果有不熟悉的地方,希望读者能够查阅相关资料。

 

/*    文件名称: tree.h    作用描述:         理解树(结构题的基本操作)*/# ifndef __TREE_H__# define __TREE_H__typedef int treeNodeData;struct binaryTreeNode{    treeNodeData data;                 // 数据    struct binaryTreeNode * lchild;    // 左孩子    struct binaryTreeNode * rchild;    // 右孩子};typedef struct binaryTreeNode     treeNode;    // 方便使用/*    函数名称: initializeTree    函数传参: 二级指针    函数返回: void    函数功能: 对外部定义的树的跟节点进行初始化    函数描述: 根据值初始化,方便后续生成红黑树,或者平衡二叉树*/void initialBinaryTree(treeNode ** root);/*    函数名称: destoryBinaryTree    函数传参: 二级指针    函数返回: void    函数功能: 销毁二叉树    函数描述: */void destoryBinaryTree(treeNode ** root);/*    函数名称: preTravelTree    函数传参: 二级指针    函数返回: void    函数功能: 先序遍历整棵树    函数描述: */void preTravelTree(treeNode ** root);/*    函数名称: inTravelTree    函数传参: 二级指针    函数返回: void    函数功能: 中序遍历整棵树    函数描述: */void inTravelTree(treeNode ** root);/*    函数名称: postTravelTree    函数传参: 二级指针    函数返回: void    函数功能: 后序遍历整棵树    函数描述: */void postTravelTree(treeNode ** root);/*    函数名称: insertTreeNode    函数传参: 根节点二级指针    函数返回: void    函数功能: 插入排序二叉树节点    函数描述:        所有小于中间节点的字节点都在左边        所有大于中间节点的子节点都在右边        没有等于中间节点的子节点*/void insertTreeNode(treeNode ** root, int val);# endif
/*    文件名称: tree.c    作用描述:        基本函数的实现        理解树(结构题的基本操作)*/# include "tree.h"# include 
# include
void initialBinaryTree(treeNode ** root){ // 入参检测 if (root == NULL) { return; } *root = NULL;}void destoryBinaryTree(treeNode ** root){ if (root == NULL) { return; } if (*root == NULL) { return; } destoryBinaryTree(&((*root)->lchild)); destoryBinaryTree(&((*root)->rchild)); (*root)->lchild = NULL; (*root)->rchild = NULL; free(*root); *root = NULL;}void preTravelTree(treeNode ** root){ if (root == NULL) { return; } if (*root == NULL) { return; } printf("%d ", (*root)->data); preTravelTree(&((*root)->lchild)); preTravelTree(&((*root)->rchild));}void inTravelTree(treeNode ** root){ if (root == NULL) { return; } if (*root == NULL) { return; } inTravelTree(&((*root)->lchild)); printf("%d ", (*root)->data); inTravelTree(&((*root)->rchild));}void postTravelTree(treeNode ** root){ if (root == NULL) { return; } if (*root == NULL) { return; } postTravelTree(&((*root)->lchild)); postTravelTree(&((*root)->rchild)); printf("%d ", (*root)->data);}static void insertTreeNodePnode(treeNode ** root, treeNode * node){ if (*root == NULL) { *root = node; /* 注意 */ return; } if (node == NULL) { return; } if ((*root)->data > node->data) { insertTreeNodePnode(&((*root)->lchild), node); } else if ((*root)->data < node->data) { insertTreeNodePnode(&((*root)->rchild), node); } else { return; }}void insertTreeNode(treeNode ** root, int val){ // 将val值创建成节点 treeNode * node = NULL; if (root == NULL) { return; } node = (treeNode *)malloc(sizeof(treeNode)); if (node == NULL) { return; } node->data = val; node->rchild = NULL; node->lchild = NULL; insertTreeNodePnode(root, node);}

测试函数main函数

/*    文件名称: mian.c    作用描述:        对树进行测试*/# include "tree.h"# include 
int main(void){ // pTreeNode p; treeNode * root = NULL; initialBinaryTree(&root); insertTreeNode(&root, 10); insertTreeNode(&root, 9); insertTreeNode(&root, 12); insertTreeNode(&root, 123); insertTreeNode(&root, 111); insertTreeNode(&root, 110); preTravelTree(&root); printf("\n"); destoryBinaryTree(&root); return 0;}

编译过程 makefile文件

src=*.ctree:$(src)    gcc $(src) -o tree -Wall    .PHONY:clean:    rm tree

运行过程:

  将main.c tree.c tree.h 放在同一目录下

  新建makefile文件,将填写如上内容

  执行make

  运行./tree

 

转载于:https://www.cnblogs.com/ziyougu/p/4736523.html

你可能感兴趣的文章
洛谷训练P1008(循环+暴力)
查看>>
【挖坟】HDU3205 Factorization
查看>>
reentrantlock用于替代synchronized
查看>>
Android包管理机制(二)PackageInstaller安装APK
查看>>
测试aau代码
查看>>
jenkins相关默认路径
查看>>
条件编译#ifndef
查看>>
正则表达式
查看>>
slick对超过22个属性的表进行映射的两种办法
查看>>
hdu5731
查看>>
iOS 路径设置(转)
查看>>
科学计算和可视化
查看>>
WPF 自定义TextBox,可控制键盘输入内容
查看>>
一起学Android之ViewPager
查看>>
ajax方式提交表单数据并判断当前注册用户是否存在
查看>>
2017.10.23 Arduino Atmel EFM32低功耗监测
查看>>
poj2063
查看>>
poj1434
查看>>
Eclipse主题更改
查看>>
ubuntu刚安装好之后apt-get使用异常
查看>>