26.二叉搜索树与双向链表
问题:
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
解决:
思想:
这道题是考验二叉树的中序遍历的特点。我们需要知道,**二叉树的中序遍历是会得到其排序顺序。**那么我们根据这个特点,可以通过二叉树的中序遍历,然后再使用双向链表,就可以将其按照链表方式排序起来。

python代码:
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def Convert(self, pHead):
# write code here
self.LastNode=None
self.inorder(pHead)
while(self.LastNode and self.LastNode.left): ###从后往前寻找头节点。
self.LastNode=self.LastNode.left
return self.LastNode
def inorder(self,root):
if root:
current=root
if root.left:
self.inorder(root.left)
current.left=self.LastNode ### 这里建立双向链表
if(self.LastNode):
self.LastNode.right=current
self.LastNode=current ###每次使LastNode指向新访问的节点(B,A,C)
if root.right:
self.inorder(root.right)
class Solution:
def Convert(self, pRootOfTree):
# write code here
if not pRootOfTree:
return pRootOfTree
cur=pRootOfTree
stack=[]
preNode=TreeNode(0)
h=preNode
while cur or stack:
while cur:
stack.append(cur)
cur=cur.left
cur=stack.pop()
preNode.right=cur
cur.left=preNode
preNode=cur
cur=cur.right
p=h.right
p.left=None
return p


173

被折叠的 条评论
为什么被折叠?



