二叉树的介绍
树是一个非顺序数据结构,它对于存储需要快速查找的数据非常有用。
现实例子就是公司的组织架构,总裁为树的最顶端叫根节点,各部门按照领导人区分为子树。
二叉树术语概念
整个二叉树结构中,每个点叫作节点,每个节点都有父节点,而最上面的为根节点,根节点是没有父节点的。
节点另外一个属性为深度,是根据父节点有多少个来算的。
由根节点向下分的2个节点为子树,子树下面节点也是子树。
二叉树和二叉树搜索
二叉树最多2个节点,一个是左侧子节点,一个是右侧子节点。这些定义有助于我们写出更高效的向树中插入、查找和删除节点的算法。
二叉树搜索树(BST)是二叉树的一种,但是它只允许你在左侧节点存储(比父节点)小的值,在右侧节点存储(比父节点)大(或者等于)的值。
例子—插入一个节点
如根据下图,现在已经有一个二叉树。我们需要添加一个6,是怎样的?
首先会检测二叉树是否为空?
第二检测根节点(key[6] < root[11]为真),然后继续检测(node.left不是null),到达node.left[7]节点。
第三检测(key[6] < key[7]为真),然后继续检测(node.left不是null),到达node.left[5]节点。
最后检测(key[6] < key[5]为真),然后继续检测(node.right不是null),为空添加在key[5]右节点添加key[6]。
例子—移除一个节点
现在我们要移除一个节点5。
首先会检测二叉树是否为空?
第二检测根节点(key[5] = root[11]为真),然后检查(key[5] < root[11])然后继续检测(node.left不是null),到达node.left[7]节点。
第三检测根节点(key[5] = key[7]为真),然后检查(key[5] < key[7]为真),然后继续检测(node.left不是null),到达node.left[5]节点。
第四检测(key[5] = key[5]为真),然后删除 key[5]节点。
最后(key[5] )子节点,key[3]的父节点改成原来key[5]的父节点key[7]。
二叉树的遍历
二叉树的遍历有三种方式:中序遍历、先序遍历和后序遍历。
中序遍历是一种以上行顺序访问BST所有节点的遍历方式,也就是以从最小到最大的顺序访问所有节点。可以应用于树的排序操作。
如图:二叉树的遍历
二叉树的遍历有三种方式:中序遍历、先序遍历和后序遍历。
中序遍历是一种以上行顺序访问BST所有节点的遍历方式,也就是以从最小到最大的顺序访问所有节点。可以应用于树的排序操作。
如图:二叉树的遍历
二叉树的遍历有三种方式:中序遍历、先序遍历和后序遍历。
中序遍历是一种以上行顺序访问BST所有节点的遍历方式,也就是以从最小到最大的顺序访问所有节点。可以应用于树的排序操作。
如图:二叉树的遍历
二叉树的遍历有三种方式:中序遍历、先序遍历和后序遍历。
中序遍历是一种以上行顺序访问BST所有节点的遍历方式,也就是以从最小到最大的顺序访问所有节点。可以应用于树的排序操作。
如图:二叉树的遍历
二叉树的遍历有三种方式:中序遍历、先序遍历和后序遍历。
中序遍历是一种以上行顺序访问BST所有节点的遍历方式,也就是以从最小到最大的顺序访问所有节点。可以应用于树的排序操作。
如图: