题目描述:
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
思路:
中序遍历可以得到二叉搜索树的从小到大排序,存在列表里
遍历列表,左子树指向上一个,右子树指向下一个
代码:
class Solution:
def Convert(self, pRootOfTree):
# write code here
if not pRootOfTree:
return None
self.node_list = []
self.midOrder(pRootOfTree)
if len(self.node_list) > 1:
for i in range(1, len(self.node_list) - 1):
self.node_list[i].left = self.node_list[i - 1]
self.node_list[i].right = self.node_list[i + 1]
self.node_list[0].right = self.node_list[1]
self.node_list[-1].left = self.node_list[-2]
return self.node_list[0]
def midOrder(self, root):
if not root:
return
self.midOrder(root.left)
self.node_list.append(root)
self.midOrder(root.right)