前言
数据结构中的数就像它的名字一样,通过一个头节点进而分散出许多的叶子节点,而我们一般经常用到的是特殊的数,就是我们今天说到的二叉树,一个节点最多有两个叶子节点。
一、树是什么
像这张图一样,一个节点下有许多的子节点的就为树,但是这样的树意义不大,所以我们经常使用的是它的特殊形式二叉树,,那便是一个节点最多有两个叶子节点。
二、二叉树解释
1.二叉树的基本知识
二叉树我们需要知道的知识其中之一为:
高度:树的高度h,树的高度就最大层数。
叶子:度为零的节点,即没有叶子节点的节点。
度:一个节点含有子树的个数就为度。
树的度:最大的度就为树的度。
父子节点:如图A就相当于为B和C的父节点,B和C就为A的子节点。
兄弟节点:为同一个父节点,父节点的字节点互为兄弟节点,C就为B的兄弟节点。
根的层次:根的层次为1,那它的子节点层次就为2.
2.二叉树的种类
如果只是普通的二叉树实际中也没有太大的意义,我们主要用到的是两种特殊的二叉树,分别为满二叉树和完全二叉树。
这个便是满二叉树,最后一层已经没有多余的叶子节点。
这个是完全二叉树,最后一层还有剩余的节点,但是之前的节点一定是连续的才可以被称为完全二叉树。
公式进行计算
满二叉树的高度=为 : h = log2(n+1)
完全二叉树的高度=为 : h = log2(n)+1
满二叉树的节点个数为:n = 2^h-1
完全二叉树节点个数为:[2^(h-1),2^h-1]
3.二叉树的遍历
我们创建二叉树后,比较常用的三种遍历为前序遍历,中序遍历,后序遍历。
前序遍历是先根节点,左子树,右子树。
中序遍历是先左子树,根节点,右子树。
后序遍历是先左子树,右子树,根节点。
由此可以看出前中后序遍历主要的区别是和根节点有关。
我们一般使用递归的方式进行的。
举例一下前序遍历,遍历的结束条件就返回,由于前序遍历先经过根,所需现在根打印,然后进入左子树,最后找到NULL,进入右子树,同理找到NULL返回。递归完成后就是二叉树的前序遍历。其他两种遍历同理,只需改变根节点的位置即可。
void TreeFront(Tnode* ps)//前序遍历
{
if (ps == NULL)
{
printf("NULL ");
return;
}
printf("%d ", ps->data);
TreeFront(ps->left);
TreeFront(ps->right);
}
总结
我们在树的学习中主要学这种特殊的二叉树,二叉树就已经为一个有特殊构成的数据结构,感谢观看,如有错误欢迎指正。