Antiguo Wei gana la oferta que le llevará a conocer --- Título de la serie de cepillo (26 árboles binarios de búsqueda y la lista doblemente enlazada)

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.
Aquí Insertar imagen Descripción

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)

Publicados 160 artículos originales · elogios ganado 30 · Vistas a 70000 +

Supongo que te gusta

Origin blog.csdn.net/yixieling4397/article/details/104954424
Recomendado
Clasificación