Límite de tiempo: C / C ++ 1 segundo, otros idiomas 2 segundos Límite de espacio: C / C ++ 64M, otros idiomas 128M Hot index: 514583
Puntos de conocimiento de esta pregunta: Divide y conquista
Descripción del título
Ingrese a un árbol de búsqueda binaria y convierta el árbol de búsqueda binaria en una lista ordenada doblemente vinculada. Es necesario que no se puedan crear nuevos nodos, y solo se puede ajustar el punto del puntero del nodo en el árbol.
ps: La solución a este problema tiene un nuevo nodo, que no resuelve el problema.
Idea: recorrido en orden, izquierdo, medio y derecho, el subárbol derecho del nodo del nodo que apunta al nodo apunta al nodo recursivo actual pRootOfTree, el subárbol izquierdo de pRootOfTree apunta al nodo del nodo, y luego el nodo del nodo se mueve hacia atrás , que es igual a node = pRootOfTree
function Convert(pRootOfTree){
let node = null,realHead = null
CovertSub(pRootOfTree)
return realHead
function CovertSub(pRootOfTree){
if(!pRootOfTree) return null
CovertSub(pRootOfTree.left)
if(!node){
node = pRootOfTree
realHead = pRootOfTree
}else{
node.right = pRootOfTree
pRootOfTree.left = node
node = pRootOfTree
}
CovertSub(pRootOfTree.right)
}
}