- 算法思想
因为后序遍历是先访问左子树,再访问右子树,最后访问根节点。当用栈实现遍历时,必须分清返回根节点时,是从左子树返回的还是从右子树返回的。所以使用辅助指针r指向最近已访问的结点。当然也可以在节点中增加一个标志域,记录是否已被访问。
#include<iostream>
using namespace std;typedef char ElemType;
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;//创建二叉树
void CreateBT(BiTree &T){
char ch;
cin>>ch; //先输入节点值
if(ch == '#') T=NULL; //递归结束建空树
else{
T = new BiTNode; ///生成结点
T->data=ch;
CreateBT(T->lchild);
CreateBT(T->rchild);
}
}
void P

本文介绍了如何使用C语言非递归地实现二叉树的后序遍历。通过创建一个辅助栈来跟踪节点,算法首先将节点推入栈中并遍历到最左边,然后在没有左子节点时检查右子节点。如果右子节点存在且未被访问,就转向右子树;否则,弹出栈顶元素并访问它,同时更新最近访问的节点。
最低0.47元/天 解锁文章
3660





