打卡-Microsoft-Reconstrunct Binary Tree de Preorder y Inorder
Google|Sorting A List with 3 Unique Numbers
Airbnb|First and Last Indices of an Element in a Sorted Array
Google|Create a Simple Calculator
Microsoft|Largest Product of 3 Elements
FaceBook|Find the k-th Smallest Element in a List
Apple|Maximum Profit From Stocks
Apple|Merge Overlapping Intervals
LinkedIn|Create a Balanced BST
Microsoft|Ways to Traverse a Grid
Google|Deepest Node in a Binary Tree
Facebook|First Missing Positive Integer
LinkedIn|Find the Number of Islands
Recent Microsoft interview problem.
Esta pregunta ha surgido recientemente Microsoft en la entrevista.
You are given the preorder and inorder traversals of a binary tree in the form of arrays. Write a function that reconstructs the tree represented by these traversals.
Asigne a un árbol binario un recorrido de orden de predoncia y un resultado de recorrido de orden intermedio para reconstruir el árbol binario.
Test Case:
Input1:
preorder = ['a', 'b', 'd', 'e', 'c', 'f', 'g']
inorder = ['d', 'b', 'e', 'a', 'f', 'c', 'g']
Output1:
abcdefg
El árbol binario es
a
/ \
b c
/ \ / \
d e f g
【Aquí hay un espacio publicitario.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from collections import deque
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
Utilice la jerarquía de propiedades str para generar un árbol determinado
def __str__(self):
queue = deque()
queue.append(self)
result = ''
while len(queue):
node = queue.popleft()
result += str(node.value)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
return result
class Solution:
El primer elemento del recorrido de reserva es el nodo raíz del árbol
El orden medio atraviesa el subárbol izquierdo donde todos los elementos del lado izquierdo del nodo raíz central componen el nodo raíz, y todos los elementos de la derecha que componen el subárbol derecho del nodo raíz
Los resultados del recorrido de reserva de los subárboles izquierdo y derecho se pueden encontrar en la lista de recorridos de reserva original, respectivamente
Y así sucesivamente, la resolución recursiva
def reconstruct(self, preorder, inorder):
if not preorder and inorder:
return None
if len(preorder) == len(inorder) == 1:
return Node(preorder[0])
root = Node(preorder[0])
rootIdx = inorder.index(root.value)
root.left = self.reconstruct(preorder[1:rootIdx+1], inorder[0:rootIdx])
root.right = self.reconstruct(preorder[rootIdx+1:], inorder[rootIdx+1:])
return root
# Test Program
preorder = ['a', 'b', 'd', 'e', 'c', 'f', 'g']
inorder = ['d', 'b', 'e', 'a', 'f', 'c', 'g']
tree = Solution().reconstruct(preorder, inorder)
print(tree)
# abcdefg
# a
# / \
# b c
# / \ / \
# d e f g
Si usted tiene alguna sugerencia para los requisitos de contenido, o encontrado cualquier software, problemas de uso de la aplicación, por favor directamente en el número público de la interfaz principal para enviarme una carta privada, creo que responderá de manera oportuna.¡Gracias por su apoyo!
Cooperación: classroom.it@hotmail.com
Hi
Hola, señor.
Soy M Xiansen
Esta es una plataforma para aprender juntos
Lo tomaré. Quieres aprender
Hacer tutoriales o escribir artículos
Aprendemos inglés juntos aquí
Aprender a programar Algoritmo
Aprender todo tipo de cosas
Es divertidoSoftware útil
Recuerde volver a menudo y echar un vistazo
(^_^)a(^_^)a
Haga clic. Leer el texto original Echa un vistazo a la serie en vivo de algoritmos python
Sólo pide uno si te gusta Compartir. Te gusta Estoy mirando Tres empresas¡Vamos!
Enviar al autor