二叉搜索树
(BST)是二叉树的一种特殊表示形式,它满足如下特性:
- 每个节点中的值必须大于(或等于)存储在其左侧子树中的任何值。
- 每个节点中的值必须小于(或等于)存储在其右子树中的任何值。
下面是一个二叉搜索树的例子:
kthLargest方法
该方法的作用是返回二叉搜索树第k大的节点
在每个节点中放置一个计数器,以表示以此节点为根的子树中有多少个节点。
对于二叉搜索树的每个节点来说,它的左子树上所有结点的值均小于它的根结点的值,右子树上所有结点的值均大于它的根结点的值。
换言之,对于二叉搜索树的每个节点来说,若其左子树共有n个节点,那么该节点是组成二叉搜索树的有序数组中第n + 1个值。若其右子树有m个节点,那么该节点是二叉搜索树的第m+1大的节点。
具体操作如动图
kthSmallest的思路与其类似。
前驱(predecessor)/后继(successor)
以后继为例:
若一个节点有右子树,那么该节点的后继节点是其右子树中val值最小的节点
若一个节点没有右子树,那么判断该节点和其父节点的关系:
2.1 若该节点是其父节点的左孩子,那么该节点的后继结点即为其父节点
2.2 若该节点是其父节点的右孩子,那么需要沿着其父亲节点一直向树的顶端寻找,直到找到一个节点P,P节点是其父节点Q的左孩子,那么Q就是该节点的后继节点
相关代码
1 | public class BinaryTree { |