题目难度: 简单
今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~
O(N): 只需要遍历树一遍O(H): H 是树的高度, 也是递归栈的空间消耗 (改用 Morris 遍历可使得空间变成 O(1), 感兴趣的小伙伴可以参考之前这篇文章剑指 Offer 54. 二叉搜索树的第 k 大节点 - leetcode 剑指 offer 系列)class Solution:
def convertBiNode(self, root: TreeNode) -> TreeNode:
# 中序遍历+哨兵+pre
# 全局变量存储当前节点, 需要一个哨兵节点
# 每次中序遍历到node节点时, 将全局节点的右子节点设为该节点
# 然后将node的左子节点设为空, 将全局节点变为node
dummy = TreeNode(0)
pre = dummy
def inorder(node):
nonlocal pre
if not node:
return
inorder(node.left)
# 前一节点的右子节点指向当前节点
pre.right = node
# 更新前一节点为当前节点
pre = node
# 注意当前节点断开与左子节点的连接
node.left = None
inorder(node.right)
inorder(root)
return dummy.right
大家可以在下面这些地方找到我~😊
我的公众号: 算法精选, 欢迎大家扫码关注~😊
