关于树知识点的一些代码
树的概念:与树的形状相对应的一种数据结构。
一般有叉树和M叉树构成,其中二叉树是指内个节点最多含有两颗孩子的树,从孩子出发,这些节点的每个结点又都可以有两个结点;M叉树是指每个结点最多有M个结点的树,二叉树是特殊的M叉树,这里的M就是二。
这里先介绍二叉树,对于二叉树的遍历问题一般有三种遍历方式:前序遍历、中序遍历、后序遍历。
前序遍历:
`//以前序方式遍历树,使用递归的方法
void inOrder(node *n)
{
printf("%d \t", n->data);
if (n->leftchild != NULL)
inOrder(n->leftchild);
if (n->rightchild != NULL)
inOrder(n->rightchild);
}
//以中序方式遍历树,使用递归的方法
中序遍历:
void inOrder(node *n)
{
if (n->leftchild != NULL)
inOrder(n->leftchild);
printf(“%d \t”, n->data);
if (n->rightchild != NULL)
inOrder(n->rightchild);
}
//以后序方式遍历树,使用递归的方法
后序遍历:
void inOrder(node *n)
{
if (n->leftchild != NULL)
inOrder(n->leftchild);
if (n->rightchild != NULL)
inOrder(n->rightchild);
printf("%d \t", n->data);
}`
几种常见树
二叉搜索树
二叉搜索树首先是一个二叉树,它的元素按“左孩子 < 根 < →右孩子”的方式排序,它的一些应用领域如下:
信息组织、创建关联容器、以不同顺序显示算术表达式、空间索引、二进制图像表示、二进制图像处理、相似性传感设备、WEB浏览器、排序等等;表达式树
表达式树是一个表示算术表达算术表达式的二叉树,它的每个叶子结点表示一个操作数,内部结点是运算符,对结点执行后序遍历。决策树
决策树是一个存储要执行操作的树,操作的选择为两者选一,它的一些应用领域如下:平衡二叉树
如果树的平衡因子是-1、0和1,则树是平衡树,存在两种类型用于平衡不平衡的二叉树搜索树即自平衡二叉搜索树和自组织二叉搜索树。
AA树、AVL树、红-黑树、替罪羊树属于平衡二叉树。BSP树
BSP(Binary Space Partitioning)即二叉空间划分树,这种方法递归地将空间使用超平面划分为凸面体集合。它的一些应用领域如下:
图像处理、计算机图形学、机器视觉、游戏。四元树
四元树是一个每个结点都有四个孩子的树形数据结构,四元树常用于划分二维空间,它的一些应用领域如下:
图像处理、空间数据索引、2D中的快速碰撞检测、存储稀疏数据等等。八叉树
八叉树是二叉搜索树的一种变体,八叉树是四元树的3D兄弟,每个结点最多有8个孩子,它常用于划分三维空间,它的一些应用领域如下:
三维碰撞检测、计算机图形生成等等。字典树
字典树是单词处理的最流行数据结构,这是一种特殊类型的树,它存储字符串并使其能够快速检索,它的一些应用领域如下:
字典表示、近似字符串匹配、动态散列、IP地址查询等等。