前言
之前在leetcode里面看到了关于二叉树前序遍历的迭代写法,刚刚开始不清楚啥是二叉树遍历的迭代写法,原来是非递归,显得有些尴尬!但是发现自己还是不太会写,然后进行记录汇总,方便后期学习!
前序
void PreOrder(TreeNode* root)
{
if(root == NULL) return;
stack<TreeNode*> st;
while(root != NULL || !st.empty())
{
if(root)
{
visit(root);
st.push(root); //
root = root->left;
}else{
root = st.top();
st.pop();
root = root->right;
}
}
}
中序
void inOrder(TreeNode* root)
{
if(root == NULL) return;
stack<TreeNode*> st;
while(root != NULL || !st.empty())
{
if(root)
{
st.push(root);
root = root->left;
}else{
root = st.top();
visit(root);
st.pop();
root = root->right;
}
}
}
后序
void postOrder(TreeNode* root)
{
if(root == NULL) return;
stack<TreeNode*> st;
while(root != NULL || !st.empty())
{
if(root)
{
visit(root);
st.push(root);
root = root->left;
}else{
root = st.top();
st.pop();
root = root->right;
}
}
}
层次
void levelOrder(TreeNode* root)
{
if(root == NULL) return;
queue<TreeNode*> qu;
qu.push(root);
while(!qu.empty())
{
curr = qu.pop();
visit(curr);
if(curr.left != NULL)
{
qu.push(curr.left);
}
if(curr.right != NULL)
{
qu.push(curr.right);
}
}
}
总结
这些本科学习的常规操作,要是不会那就记录熟悉吧!