思想:根节点先入队,栈非空时,访问栈顶结点,输出结点值,若存在左右儿子,则右儿子先入队,左儿子后入队。
代码:
//树的非递归先序遍历
void PreOrder(Node* p) {
if (p==null) return;
stack <Node*> P; //初始化栈P用来保存结点
P.push(p); //根节点入栈
while (!P.empty()) {
p = P.top(); //读栈顶元素
cout << p->data;//访问
P.pop(); //出栈
if (p->rchild) P.push(p->rchild); //右儿子入栈
if (p->lchild) P.push(p->lchild); //左儿子入栈
}
}
可以参考bilibili视频。