给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
解析:
还是用栈来代替递归。首先需要将根保存到栈中,方便下次对右子节点的查找。然后将根节点的值保存到结果数组中。按照前序遍历的顺序进行 。
代码:
vector<int> preorderTraversal(TreeNode* root)
{
stack<TreeNode*>tStack;
vector<int>res;
if (root == nullptr)
return res;
while (!tStack.empty() || root != nullptr)
{
if (root != nullptr)
{
tStack.push(root);
res.push_back(root->val);
root = root->left;
}
else if (!tStack.empty())
{
root = tStack.top()->right;
tStack.pop();
}
}
return res;
}