二叉查找树的基本操作
2016-10-26 18:01
127 查看
本总结是是个人为防止遗忘而作,不得转载和商用。
左子树上的所有结点值均小于根结点值,
右子树上的所有结点值均不小于根结点值,
左右子树也满足上述两个条件
将当前结点cur赋值为根结点root;
若p的值小于当前结点cur的值,查找cur的左子树;
若p的值不小于当前结点cur的值,查找cur的右子树;
递归上述过程,直到cur的值等于p的值或者cur为空;
当然,若结点是结构体,注意定义“小于”“不小于”“等于”的具体函数。
若当前的二叉查找树为空,则插入的元素为根结点;
若插入的元素值小于根结点值,则将元素插入到左子树中;
若插入的元素值不小于根结点值,则将元素插入到右子树中;
递归上述过程,直到找到插入点为叶子结点。
p为叶子结点
p为单支结点
p的左子树和右子树均不空
P的直接后继:P的右孩子的最左子孙,如:上面图中5的直接后继就是6。
P的直接前驱:P的左海子的最右子孙,如:上面图中5的直接前驱就是3。
删除过程:
1,将p的直接后继的值拷贝到p处
2,删除p的直接后继
PS:将上面两步的“直接后继”替换为“直接前驱”也行。
二叉查找树
二叉查找树(二叉搜索树)是满足以下条件的二叉树:左子树上的所有结点值均小于根结点值,
右子树上的所有结点值均不小于根结点值,
左右子树也满足上述两个条件
查找
给定一颗二叉查找树,查找某结点p的过程如下:将当前结点cur赋值为根结点root;
若p的值小于当前结点cur的值,查找cur的左子树;
若p的值不小于当前结点cur的值,查找cur的右子树;
递归上述过程,直到cur的值等于p的值或者cur为空;
当然,若结点是结构体,注意定义“小于”“不小于”“等于”的具体函数。
插入
插入过程如下:若当前的二叉查找树为空,则插入的元素为根结点;
若插入的元素值小于根结点值,则将元素插入到左子树中;
若插入的元素值不小于根结点值,则将元素插入到右子树中;
递归上述过程,直到找到插入点为叶子结点。
删除
记待删除的结点为p,分三种情况进行处理:p为叶子结点
p为单支结点
p的左子树和右子树均不空
p为叶子结点
p为叶子结点,直接删除该结点,再修改p的父结点的指针。p为单支结点
若p为单支结点(即只有左子树或右子树),则将p的子树与p的父亲结点相连,删除p即可。p的左子树和右子树均不空
这里要先解释两个概念:P的直接后继:P的右孩子的最左子孙,如:上面图中5的直接后继就是6。
P的直接前驱:P的左海子的最右子孙,如:上面图中5的直接前驱就是3。
删除过程:
1,将p的直接后继的值拷贝到p处
2,删除p的直接后继
PS:将上面两步的“直接后继”替换为“直接前驱”也行。
修改二叉树的某个节点
如把上面图中的节点10改成14,最简单的做法是把节点10删掉,然后插入14。相关文章推荐
- 二叉查找树和AVL树的基本操作(AVL树就是一颗特殊的二叉查找树。)
- 二叉查找树的基本操作之查找插入删除
- 二叉查找树的基本操作
- 实现基本二叉查找树操作的例程
- 二叉查找树的基本操作实现
- C 二叉查找树的基本操作
- 二叉查找树的基本操作(建立,插入,删除,遍历)
- 二叉查找树基本操作
- 【编程练习】二叉查找树原理及基本操作编程(GNU C实现)
- java二叉查找树的基本操作
- 二叉查找树(binary search tree)上的基本操作
- 二叉查找树的定义以及几个基本操作
- 二叉查找树的查找、插入、删除、释放等基本操作的实现(C语言)
- C语言实现二叉查找树(BST)的基本操作
- 二叉树的性质以及二叉查找树的基本操作
- 二叉排序树(二叉查找树)的基本操作
- 二叉查找树的基本操作例程
- 二叉查找树基本操作实现
- Oracle RAC系列之:ASM基本操作维护
- MySQL学习笔记1----MySQL数据库基本操作