二叉搜索树结构
- 链表数据结构存储
- 包含key,卫星数据,左右子节点,父节点
- 左子树的最大值小于根节点的值小于右子树的最小值
二叉树的遍历
遍历时间为o(n),n为树节点总数
这种遍历的实现是迭代的方法,故每次遍历以当前节点为父节点.
- 先序遍历:中,左,右
- 中序遍历:左,中,右
- 后序遍历:左,右,中
二叉树的查找
查找时间为o(h),h为树的高度
- 查找步骤:
- 从跟节点开始,比较x.key与k;(x.key为节点的值,k为输入的检索值)
- 如果k<key,则搜索该节点的左子树
- 如果k>key,则搜索该节点的右子树
- 基于二叉树的搜索性质,可找到其最大值和最小值对应的节点,也可找到树中某一节点的后继和前驱.
- 后继和前驱均都为中序遍历的顺序,寻找方法:
- 后继:
- 为当前节点右子树中具有最小值的节点(可通过调用查找最小值的函数直接搜索);若当前节点为树中最大节点,则返回为空.
- 如果当前节点没有右子树,则其后继节点为其所在左子树的第一个根节点.
- 前驱:查找左子树的最小值即可
- 后继:
二叉树的插入与删除
- 插入:时间复杂度为o(h)
- 从根节点开始,比较当前节点与插入节点的值
- 如果根节点不存在,则将新节点插入根节点
- 如果新节点的值小于当前节点,则以左子节点作为当前节点,如果新节点的值大于当前节点,则以右子节点作为当前节点.
- 删除:
- 如果当前节点没有左子节点,则以其右子节点替换(右子节点可为nil)
- 如果当前节点仅有一个左子节点,则用左子节点替换
- 如果当前节点有左右两子节点:
- 如果右子树的最小值节点无子节点,则直接替换当前节点
- 如果右子树最小值节点有右子节点,则先以右子节点替换最小值节点,再以最小值节点替换当前节点.
二叉树子树的替换
将一个子树连到另一个子树的父节点上
- 用节点v的子树替换节点u的子树:
- 将u的父节点的对应子节点指针连接到v
- 将v的父节点指针连接到u的父节点
网友评论