Given a binary tree, return
the postorder traversal of its nodes' values.
return [3, 2, 1].
Recursive solution is trivial, could you do it iteratively?
Дано бинарное дерево.
Вернуть обратный порядок обхода его вершин.
вернет [3, 2, 1].
Рекурсивное решение
тривиально. Приведите итеративное решение.
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
}
};
структуры данных - дерево
1. Положить корень дерева в первый стек
2. Пока первый стек не пустой
а) извлекаем вершину из первого стека и заносим ее во
второй;
б) заносим в первый стек левого и правого сына этой
вершины;
3. Извлекаем и выводим на печать элементы второго
стека.
Пример
Рассмотрим порядок обхода дерева на примере:
PostOrder: 3, 6, 4, 12, 24, 16, 9.
Реализация алгоритма
class Solution
{
public:
vector<int>
postorderTraversal(TreeNode *root)
{
vector<int>
res;
if (root ==
NULL) return res;
stack<TreeNode *> s;
stack<TreeNode *> output;
s.push(root);
while(!s.empty())
{
TreeNode *node = s.top(); s.pop();
output.push(node);
if
(node->left != NULL)
s.push(node->left);
if
(node->right != NULL) s.push(node->right);
}
while(!output.empty())
{
res.push_back(output.top()->val);
output.pop();
}
return res;
}
};