Given a binary tree, return
the inorder traversal of its nodes' values.
return [1, 3, 2].
Recursive solution is trivial, could you do it iteratively?
Дано бинарное дерево.
Вернуть центрированный порядок обхода его вершин.
вернет [1, 3, 2].
Рекурсивное решение
тривиально. Приведите итеративное решение.
class
Solution {
public:
vector<int>
inorderTraversal(TreeNode *root) {
}
};
структуры данных - дерево
Текущий указатель current
устанавливаем в корень. Двигаемся к левому сыну, занося вершины в стек. Когда
установится current = NULL (достигли
листа), извлекаем из стека элемент и присваиваем его значению current. Выводим его данные, переходим в
его правого ребенка и повторяем процесс заново.
Реализация алгоритма
class Solution
{
public:
vector<int> inorderTraversal(TreeNode *root)
{
vector<int> res;
if (root == NULL) return
res;
stack<TreeNode
*> s;
TreeNode *current =
root;
while(!s.empty() || current)
{
if (current)
{
s.push(current);
current =
current->left;
} else
{
current =
s.top();
s.pop();
res.push_back(current->val);
current =
current->right;
}
}
return res;
}
};
Рекурсивная реализация
class Solution
{
public:
vector<int> v;
void InOrder(TreeNode *root)
{
if (root == NULL) return;
InOrder(root->left);
v.push_back(root->val);
InOrder(root->right);
}
vector<int> inorderTraversal(TreeNode *root)
{
InOrder(root);
return v;
}
};