要求:
输入一颗二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能有新的结点,只能调整结点的指向。
分析:
由于转换后的双向链表中结点的顺序与二叉树的中序遍历相同,因此,可以对二叉树的中序遍历算法进行修改,通过在中序遍历的过程中修改结点的指向来转换成一个排序的双向链表。
代码实现:
# -*- coding:utf-8 -*-
class BiTNode():
def __init__(self):
self.data = None
self.lchild = None
self.rchild = None
class Test():
def __init__(self):
self.pHead = None #双向链表头结点
self.pEnd = None #双向链表尾结点
#方法功能:把有序数组转化为二叉树
def arrytotree(self,arr,start,end):
root = None
if end >= start:
root = BiTNode()
mid = int((start+end)/2)
#树根节点为数组中间元素
root.data = arr[mid]
#递归用左半部分数组构造root左子树
root.lchild = self.arrytotree(arr,start,mid-1)
#递归用右半部分数组构造root右子树
root.rchild