árbol binario? preorden
Título:
Dado un árbol binario, devuelve preorden
Ejemplos:
Entrada: [. 1, null, 2,3]
. 1
\
2
/
. 3
de salida: [1,3,2]
tema de análisis
preorden:
- subárbol izquierdo
- raíz
- subárbol derecho
Recursivos tres líneas para resolver el
no recursivo? Pila Información de nodo Guardar
Ideas de resolución de problemas
variable | efecto |
---|---|
pila <TreeNode *> s | Información Guardar nodo |
TreeNode * temp | Indica que el nodo de acceso actual |
Proceso:
Cuando s no vacío
retire el elemento superior como una corriente nodo temp
elemento superior de la pila
si el nodo actual hijo derecho del nodo no vacío ==> pila
(Stack avanzado después de que subárbol primera a la derecha de la pila nodo)
Si el nodo actual nodo hijo izquierdo del árbol no está vacío
==>
1. Corriente nodo temp re-pila (tal travesía completa el subárbol izquierdo cuando se puede reiterar de nuevo al nodo raíz)
2. El nodo actual en el subárbol izquierdo de la pila
3. el nodo actualSubárboles izquierdo y derecho como nulo(Una vez más, atravesando el tiempo es equivalente a ninguna información de raíz salida del nodo sub-árbol izquierdo y derecho)
Código es el siguiente
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
if (!root) return {};
stack<TreeNode*> s{{root}};
vector<int> ans;
while(!s.empty())
{
TreeNode* temp;
temp = s.top();
s.pop();
if (temp->right) s.push(temp->right); //右子树节点入栈
if (temp->left)
{
s.push(temp);
s.push(temp->left);
temp->left = NULL;
temp->right = NULL;
}
else ans.push_back(temp->val); //左子树节点为空则输出本节点信息
}
return ans;
}
};