题目:
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
来源:《剑指offer》
1.递归方法
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Head:
head = None
real_head = None
class Solution:
def Convert(self, pRootOfTree):
Head.head = None
Head.real_head = None
self.inorder(pRootOfTree)
return Head.real_head
def inorder(self, root):
if not root: return
self.inorder(root.left)
if not Head.head:
Head.head = root
Head.real_head = root
else:
Head.head.right = root
root.left = Head.head
Head.head = root
self.inorder(root.right)
2.非递归方法
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def Convert(self, pRootOfTree):
stack = []
head = None
real_head = None
is_first = True
p = pRootOfTree
while p or stack:
while p:
stack.append(p)
p = p.left
p = stack.pop()
if is_first:
head = p
real_head = p
is_first = False
else:
head.right = p
p.left = head
head = p
p = p.right
return real_head