中序遍历,并在遍历中改变结点的链项,时间复杂度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