Leetcode 426.将二进制搜索树转换为排序的双链表?

时间:2018-10-22 01:53:46

标签: python binary-search-tree doubly-linked-list inorder

我对leetcode上的第426号问题感到非常困惑,因为我认为答案是正确的。但是运行后表明我错了。以下是问题和我的原始答案:

enter image description here

enter image description here

"""
# 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

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

1 个答案:

答案 0 :(得分:2)

我看到代码有两个问题。

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

第二个bug较小,并且会影响列表中的最后一个链接以使其循环。您想要设置pre.right = head而不是pre,以便列表的最后一个节点指向第一个节点,而不是指向自身。

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