题目地址(04.06. 后继者)
https://leetcode.cn/problems/successor-lcci/
题目描述
设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。
如果指定节点没有对应的“下一个”节点,则返回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
前置知识
公司
- 暂无
思路
关键点
代码
- 语言支持:Python3
Python3 Code:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def inorderSuccessor(self, root: TreeNode, p: TreeNode) -> TreeNode:
"""
找出二叉搜索树中指定节点的下一个节点(中序后继)
解决办法:
1. 二叉搜索树的中序遍历是顺序的
2. 找到二叉搜索树的中序后继,就是找到第一个大于它的节点
"""
successor = None
# 如果存在右子树 那么中序后继一定就在右子树的最左边
if p.right:
successor = p.right
while successor.left:
successor = successor.left
return successor
# 不存在右子树 那么每次记录大于p的节点 找到比p大一点的节点
node = root
while node:
if node.val > p.val:
successor = node
node = node.left
else:
node = node.right
return successor
复杂度分析
令 n 为数组长度。
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( 1 ) O(1) O(1)