leetcode —— 面试题 17.12. BiNode

二叉树数据结构TreeNode可用来表示单向链表(其中left置空,right为下一个链表节点)。实现一个方法,把二叉搜索树转换为单向链表,要求值的顺序保持不变,转换操作应是原址的,也就是在原始的二叉搜索树上直接修改。

返回转换后的单向链表的头节点。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binode-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
————————————
解题思路:这一题使用到二叉搜索树的中序遍历是有序数组的性质,使用一个变量记录当前节点的中序遍历的上一个节点。

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

class Solution:
    def __init__(self):
        self.nums = self.curs = TreeNode(0)  # 用于保存当前节点的上一个节点,同时用于保存初始位置节点
    def convertBiNode(self, root: TreeNode) -> TreeNode:
        if not root:  # 如果节点为空,直接返回None
            return None
        if root.left:  # 左子树进行中序遍历
            self.convertBiNode(root.left)
        self.curs.right = root    # 对当前节点进行拼接
        root.left = None    # 将当前节点的左子树变为空
        self.curs = self.curs.right    # 更新当前节点的上一个结点值 
        if root.right:
            self.convertBiNode(root.right)
        return self.nums.right  返回头结点的下一个节点

因为需要遍历每个节点,因此时间复杂度为O(n)。递归次数为二叉树的层数,因此空间复杂度为O(logn)。

发布了320 篇原创文章 · 获赞 21 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_37388085/article/details/105348601