中序遍历,并在遍历中改变结点的链项,时间复杂度O(N),空间复杂度O(1)

二叉搜索树与双向链表

http://www.nowcoder.com/questionTerminal/947f6eb80d944a84850b0538bf0ec3a5

中序遍历,并在遍历中改变结点的链项,时间复杂度O(N),空间复杂度O(1)

1. 中序遍历BST 就是排序输出,因此建立中序遍历框架

2. 通过 prev 参数传入前向结点,在遍历到中间结点时连接前序结点和当前结点

代码如下:

class Solution:
    def Convert(self, pRootOfTree):
        if not pRootOfTree:
            return
        else:
            def helper(node, prev):
                if not node:
                    return prev
                prev = helper(node.left, prev)

                prev.right = node
                if prev != dummyroot:
                    node.left = prev

                prev = helper(node.right, node)

                return prev

            dummyroot = TreeNode(0)
            _ = helper(pRootOfTree, dummyroot)
            return dummyroot.right
全部评论

相关推荐

2 收藏 评论
分享
牛客网
牛客企业服务