题目:
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
- 中序遍历 用一个指针记录最后一个遍历的节点
current.left = last_node #当前的节点的left指向便利过的最后一个位置
if last_node:#如果最后一个节点不为空,最后一个节点的right指向当前位置
last_node.right = current
last_node = current#最后一个节点修改为当前节点
- 其实类似的二叉树的题目都是由递归遍历演变而来的, 这是一个非常典型的题目, 需要保存一些变量来达到所需要的要求.
class Solution:
def Convert(self, root):
if not root:
return
last_node1 = None
self.convertnode(root,last_node1)
last_node = last_node1
while last_node and last_node.left:
last_node = last_node.left
return last_node
def convertnode(self,current,last_node):
if not current:
return
if current.left:
self.convertnode(current.left,last_node)
current.left = last_node
if last_node:
last_node.right = current
last_node = current
if current.right:
self.convertnode(current.right,last_node)