如何进行迭代遍历?
二叉树的前中后序遍历都可以调用递归进行实现,如果我们了解了递归的定义,就可以知道每次使用递归都会将函数的局部变量,参数的值和返回地址等信息压入调用栈中去,然后当递归返回的时候,从递归栈的栈顶弹出上一次递归的各项参数,所以这就是递归为什么可以返回上一层位置的原因.同理,我们就可以使用栈来对二叉树进行迭代遍历.
前序遍历顺序如何?
前序遍历遵从根左右的顺序,因为栈为先入后出的数据结构,所以我们的入栈顺序应该为根右左,这样可以保证在出栈时,出栈顺序为根左右.
二叉树的前序遍历迭代写法代码如下:
vector<int> preorderTraversal(TreeNode* root) {
stack <TreeNode*> st;
vector<int>result;
if(root==nullptr){
return result;
}
st.push(root);
while(!st.empty()){
TreeNode * Temp = st.top();
result.push_back(Temp->val);
st.pop();
if(Temp->right != nullptr){
st.push(Temp->right);}
if(Temp->left != nullptr){
st.push(Temp->left);
}
}
return result;
}
};
//有时需要记住二叉树的定义方法
struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(x):val(x),left(NULL),right(NULL){
}
}