作者:程序媛

二叉树搜索树面试题,你知道吗?_删除节点


二叉树,搜索二叉树,是算法面试的必面题。聊聊面试点:

一、树 & 二叉树

树的组成为节点和边,节点用来储存元素。节点组成为根节点、父节点和子节点。

如图:树深 length 为 4;根节点的值为 5 ;父子节点关系:值为 8 和 值为 3 的节点

二叉树搜索树面试题,你知道吗?_二叉树_02

理解了树,那什么是二叉树?

二叉树 (Binary Tree),二叉是分叉的意思,就是用边区分。节点最多有两个子节点,分别为左子节点和右子节点。连接节点的就是边,所以节点最多会有三条边。二叉树的场景很多,比如用来表示算术表达式等等。

如图:值为 1 或者 8 的节点是左节点;值为 2 或 3 的节点是右节点;

二叉树搜索树面试题,你知道吗?_二叉树_03

二、二叉搜索树 BST

上面理解了二叉树,那么搜索二叉树就好理解了。搜索二叉树为了搜索而设计,要求也是将无序存储变成有序。即每个节点的值要比左子树的值大,比右子树的值小。

如图:

二叉树搜索树面试题,你知道吗?_二叉树_04

Java 实现代码如下:

面试点一:理解 TreeNode 数据结构

节点数据结构,即节点、左节点和右节点。如图

二叉树搜索树面试题,你知道吗?_二叉树_05

面试点二:如何确定二叉树的最大深度或者最小深度

答案:简单的递归实现即可,代码如下:

面试点三:如何确定二叉树是否是平衡二叉树

答案:简单的递归实现即可,代码如下:

前面面试点是 二叉树 的,后面面试点是 搜索二叉树 的。先运行搜搜二叉树代码:

结果如下:

面试点四:搜索二叉树如何实现插入

插入,还是比较容易理解的。就按照要求,插入到指定的位置。如果插入到叉搜索树的中间节点,那么会引起节点的动态变化。如图插入的逻辑:

二叉树搜索树面试题,你知道吗?_删除节点_06

  1. 值为 2 的节点开始判断
  2. 如果为空,则插入该节点
  3. 循环下面节点:
  1. 节点当前值大于,继续循环左节点
  2. 节点当前值小于,继续循环右节点

面试点五:搜索二叉树如何实现查找

算法复杂度 : O(lgN)。如图搜索及查找逻辑:

二叉树搜索树面试题,你知道吗?_删除节点_07

  1. 值为 2 的节点开始判断
  1. 节点当前值大于,继续循环左节点
  2. 节点当前值小于,继续循环右节点
  1. 如果值相等,搜索到对应的值,并返回
  2. 如果循环完毕没有,则返回未找到

面试点五:搜索二叉树如何实现删除

比较复杂了。相比新增、搜搜,删除需要将树重置。逻辑为:删除的节点后,其替代的节点为,其右节点树中值最小对应的节点。如图:

二叉树搜索树面试题,你知道吗?_子节点_08

结果为:

二叉树搜索树面试题,你知道吗?_二叉树_09

三、小结

就像码出高效面试的程序媛偶尔吃一碗“老坛酸菜牛肉面”一样的味道,品味一个算法,比如 BST 的时候,总是那种说不出的味道。

面试必备小结:

  • 树,二叉树的概念
  • BST 算法


二叉树搜索树面试题,你知道吗?_子节点_10