数据结构与算法之美专栏学习笔记-二叉树基础(上)

节点的定义

树中的元素称之为节点

高度的定义

节点的高度:节点到叶子节点的最长路径

树的高度:跟节点的高度

深度的定义

根节点到这个节点所经历的边的个数

的定义

节点的深度+1

 

二叉树

满二叉树

除了叶子结点外每个节点都有左右两个子节点

完全二叉树

叶子结点都在最低下两层,最后一层的叶子节点都靠左排列,并且除了最后一层,其他层的节点个数都要达到最大

表示、存储一颗二叉树

链式存储法

每个结点有三个字段,其中一个存储数据,另两个是指向左右子节点的指针。

顺序存储法(基于数组)

根节点存储在下标i=1的位置,左子节点存储在下标2*i=2的位置,右子节点存储在2*i+1=3的位置,以此类推。

如果节点 X 存储在数组中下标为 i 的位置,下标为 2 * i 的位置存储的就是左子节点,下标为 2 * i + 1 的位置存储的就是右子节点。

我们只要知道根节点存储的位置,这样就可以通过下标计算,把整棵树都串起来。

为了方便计算子节点,根节点会存储在下标为 1 的位置

 代码实现

二叉树的遍历

前序遍历

对于树中的任意节点来说,先打印这个节点,然

后再打印它的左子树,最后打印它的右子树。

中序遍历

对于树中的任意节点来说,先打印它的左子树,

然后再打印它本身,最后打印它的右子树。

后序遍历

对于树中的任意节点来说,先打印它的左子树,

然后再打印它的右子树,最后打印这个节点本身。

 

实际上,二叉树的前、中、后序遍历就是一个递归的过程。

比如,前序遍历,其实就是先打印根节点,然后再递归地打印左子树,最后递归地打印右子树。

遍历代码实现

猜你喜欢

转载自www.cnblogs.com/errornull/p/9954106.html