算法中后继者问题的示例分享

首先,我们来看题目描述:

设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。

如果指定节点没有对应的“下一个”节点,则返回null 。

示例 1:

输入: root = [2,1,3], p = 1
​
  2
 / \
1   3
​
输出: 2

示例 2:

输入: root = [5,3,6,2,4,null,null,1], p = 6
​
      5
     / \
    3   6
   / \
  2   4
 /   
1
​
输出: null

解决方案:

思路和算法

为了找到二叉搜索树中的节点 p 的后继节点,最直观的方法是中序遍历。由于只需要找到节点 p 的后继节点,因此不需要维护完整的中序遍历序列,只需要在中序遍历的过程中维护上一个访问的节点和当前访问的节点。如果上一个访问的节点是节点 p ,则当前访问的节点即为节点 p 的后继节点。如果节点 p 是最后被访问的节点,则不存在节点 p 的后继节点,返回 null 。

代码

Python3

算法中后继者问题的示例分享_第1张图片

Java

算法中后继者问题的示例分享_第2张图片 

复杂度分析

时间复杂度:O(n) ,其中 n 是二叉搜索树的节点数。中序遍历最多需要访问二叉搜索树中的每个节点一次。

空间复杂度:O(n) ,其中 n 是二叉搜索树的节点数。空间复杂度取决于栈深度,平均情况是 O(logn) ,最坏情况是 O(n) 。

好了,今天的文章分享就到这里了,希望对大家的学习有帮助哦!

你可能感兴趣的:(算法)