一文带你了解二叉搜索树(面试向)

二叉搜索树作为一种特殊二叉树结构,在面试中出现的频次不可谓不高。
本文通过对leetcode上的8道二叉搜索树题进行整理,让你对二叉搜索树的掌握更进一步~

首先,什么是二叉搜索树?

从严谨的数学定义上说,二叉搜索树是这样的:
二叉搜索树要么是空树,要么是具有下列性质的二叉树:

  • 节点的左子树只包含小于当前节点的数。
  • 节点的右子树只包含大于当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。
    二叉搜索树

定义当然是对一个概念的最好描述,但是,当做题的时候,我们更应该注意二叉搜索树的两个特性。

  • 二叉搜索树的中序遍历为一个递增序列
  • 二叉搜索树的子树也是一个二叉搜索树

牢记这两个特性,遇到二叉搜索树的题目就不怕不怕啦~
废话不多说,直接操练起来!

.

二叉搜索树的第K大节点

这是一道剑指offer上的简单题
在这里插入图片描述
看到第K大,自然而然想到可以利用特性:中序遍历为递增序列。
但是这只是一个baseline,进阶地,我们可以想想怎么优化:

  • 中序遍历为递增的,对求第K小很方便。但若求第K大,需要遍历完整棵树。
  • 题目只要求求第k大而不是整个序列,可否在遍历到第k大的节点时提前返回?

转念一想,中序遍历之所以是递增序列,是因为它的遍历方式为:左->根->右
那么,如果把遍历方式改为右->根->左,是否就是递减序列了呢?
而且,我们还可以加入一个指示变量k_node,记录遍历到节点的个数,从而实现优化2。
代码如下:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def kthLargest(self, root: TreeNode, k: int) -> int:
        stack
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值