Leetcode 426. 将二叉搜索树转换为有序双向链表?

Leetcode 426. Convert Binary Search Tree to Sorted Doubly Linked List?

我对leetcode上的426号题很疑惑,我觉得我的答案是对的。但是在 运行 之后,它表明我错了。以下是问题和我的原始答案:

"""
# Definition for a Node.
class Node:
    def __init__(self, val, left, right):
        self.val = val
        self.left = left
        self.right = right
"""
class Solution:
    def treeToDoublyList(self, root):
        """
        :type root: Node
        :rtype: Node
        """
        if root:
            sign = True
            stack = []
            node = root

            while stack or node:
                if node:
                    stack.append(node)
                    node = node.left 
                else:
                    node = stack.pop()

                    if sign:
                        pre,head = node, node
                    else:
                        pre.right = node
                        node.left = pre
                        pre = node

                    node = node.right

            head.left = pre
            pre.right = pre

            return head
        else:
            return None

有人可以帮我弄清楚我的代码有什么问题吗?如有任何意见或建议,我们将不胜感激。

我发现代码有两个问题。

首先是在您的 if sign: 块中您需要设置 sign = False 因为您只想初始化一次 head 并且只在第一次执行该块。 (不确定为什么将变量称为 sign,也许 first 更合适,或者只是为该条件重用 head = None 也可以。)

第二个错误较小,影响列表中的最后一个 link,使其循环。您想要设置 pre.right = head 而不是 pre,以便列表的最后一个节点指向第一个节点,而不是它本身。

我还没有真正测试过这个,所以我可能遗漏了一些东西,但在我看来这应该足以修复这段代码。