注意返回值是链表最左边的元素,否则会报错
题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
解法1:用中序遍历来连接
根据二叉搜索树的性质,它的中序遍历就是排序后的列表,因此可以先按中序遍历把所有元素放在一个list中,再连接成双向链表
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def iter_list(self, element_list, root):
if root.left:
self.iter_list(element_list, root.left)
element_list.append(root)
if root.right:
self.iter_list(element_list, root.right)
def Convert(self, pRootOfTree):
# write code here
if not pRootOfTree:
return pRootOfTree
element_list = []
if pRootOfTree.left:
self.iter_list(element_list, pRootOfTree.left)
element_list.append(pRootOfTree)
if pRootOfTree.right:
self.iter_list(element_list, pRootOfTree.right)
for i in range(len(element_list)):
if i != len(element_list) - 1:
element_list[i].right = element_list[i + 1]
if i != 0:
element_list[i].left = element_list[i - 1]
while pRootOfTree.left:
pRootOfTree = pRootOfTree.left
return pRootOfTree