二叉树后序遍历
C++二叉树后序遍历基本思想
创建两个栈stk和res,先把根节点压入栈中,循环stk不为空,创建一个tmp节点赋值为栈顶元素,弹栈,把tmp压入另一个栈,如果tmp的左孩子不为空,就把左孩子压入栈,如果tmp的右孩子不为空就把后孩子压入栈,循环输出res栈顶元素,输出一个弹一个,循环条件res不能为空
C++二叉树后序遍历代码
void postOrderSortCure(TreeNode* root)
{
if(root!=NULL)
{
postOrderSortCure(root->left);
postOrderSortCure(root->right);
cout<<root->val<<" ";
}
}
void postOrderSort(TreeNode* root)
{
stack<TreeNode*> stk;
stack<TreeNode*> res;
stk.push(root);
while(!stk.empty())
{
TreeNode* tmp = stk.top();
stk.pop();
res.push(tmp);
if(tmp->left) stk.push(tmmp->left);
if(tmp->right) stk.push(tmp->right);
}
while(!res.empty())
{
cout<<res.top()->val<<" ";
res.pop();
}
}