26. Los árboles binarios de búsqueda y la lista doblemente enlazada
problema:
Introduzca un árbol de búsqueda binaria, el árbol de búsqueda binaria convertida en una lista doblemente enlazada ordenadas. Requisitos no pueden crear ningún nuevo nodo, punto sólo para ajustar el puntero del nodo del árbol.
solución:
pensado:
Esta pregunta es una prueba de un árbol binario en funciones de orden transversal. Necesitamos saber en orden de recorrido ** árbol binario se va a poner su orden. ** nos acuerdo con esta característica, se puede con el fin de recorrido de árbol binario, y luego usar una lista doblemente enlazada, puede clasificar de acuerdo a su lista de manera vinculada.
código 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)