二叉树的前序遍历我们很熟悉,但是我们曾经是基于递归的方法实现的前序遍历,今天我们来用迭代的方法实现前序遍历,迭代本质上使用的还是递归的思想,前序遍历是根左右,如果还有左子树就一直向下找,完了之后再返回向上向右寻找,直到遍历完整棵二叉树。代码如下:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
if (root == nullptr)
{
return res;
}
stack<TreeNode*>stk;
TreeNode* node = root;
while (!stk.empty() || node != nullptr) //如果栈不为空或者结点不为空则进入循环
{
while (node != nullptr) //如果结点不为空
{
res.push_back(node->val); //首先将该结点(也就是根节点)放入数组中
stk.push(node); //将该结点入栈,便于之后寻找右结点
node = node->left; //将该结点指向它的左结点
}
node = stk.top(); //取出栈顶元素,即某棵子树的根元素
stk.pop(); //将栈顶元素出栈
node = node->right; //从栈顶元素开始寻找它的右结点
}
return res;
}