二叉搜索树与双向链表
题目描述:
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
思路:
1,中序遍历
2,不是从根节点开始,而是从中序遍历得到的第一个节点开始。
3,定义两个辅助节点listHead(链表头节点)、listTail(链表尾节点)。
二叉树只是换了种形式的链表;listHead用于记录链表的头节点,用于最后算法的返回;listTail用于定位当前需要更改指向的节点。
https://blog.****.net/u010005281/article/details/79657259
转换实例:
代码实现:
// An highlighted block
var foo = 'bar';
Python代码实现:
// An highlighted block
class Solution:
def Convert(self, pRootOfTree):
if not pRootOfTree:
return pRootOfTree
if not pRootOfTree.left and not pRootOfTree.right:
return pRootOfTree
self.Convert(pRootOfTree.left)
left=pRootOfTree.left
if left:
while left.right:
left=left.right
left.right=pRootOfTree
pRootOfTree.left=left
self.Convert(pRootOfTree.right)
right=pRootOfTree.right
if right:
while right.left:
right=right.left
right.left=pRootOfTree
pRootOfTree.right=right
while pRootOfTree.left:
pRootOfTree=pRootOfTree.left
return pRootOfTree