【问题标题】:Leetcode 426. Convert Binary Search Tree to Sorted Doubly Linked List?Leetcode 426. 将二叉搜索树转换为有序双向链表?
【发布时间】:2018-10-22 01:53:45
【问题描述】:

对于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

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

【问题讨论】:

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


    【解决方案1】:

    我发现代码有两个问题。

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

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

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

    【讨论】:

    • 哎呀,我多么粗心。修改后就可以了。通常,我曾经将我的代码复制并粘贴到 VS 代码中以进行逐步调试。但是对于那些关于二叉树的问题,很难创建输入。那么请问您通常会做什么来快速调试这些问题?
    • @Aurora 很高兴修复了它!在这种情况下,当我注意到变量 sign 没有通过脚本更改时,我看到了一个危险信号,对于第二部分,我认为典型情况下您没有指向自身的节点。有时,用全新的眼光看待代码很有用! VS Code 是一个很好的调试工具。能够在头脑中调试代码(有条不紊地遍历每一行,保留每个变量的当前变量表)是一项大量工作,但这是一项有价值的技能。这需要练习,所以尽可能尝试锻炼它。
    猜你喜欢
    • 2012-07-15
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    • 2020-12-28
    相关资源
    最近更新 更多