C语言实现非递归后序遍历核心代码
时间: 2023-01-11 14:55:36 浏览: 75
非递归后序遍历二叉树的核心代码如下所示:
```
// 初始化栈
stack<Node*> s;
// 当前结点初始化为根结点
Node* cur = root;
// 前一个访问的结点
Node* pre = NULL;
while (cur != NULL || !s.empty()) {
// 当前结点不为空,将结点压入栈中,并将当前结点赋值为左孩子
if (cur != NULL) {
s.push(cur);
cur = cur->left;
} else {
// 当前结点为空,取出栈顶结点
Node* top = s.top();
// 如果栈顶结点的右孩子为空或者右孩子已经访问过,则访问栈顶结点
if (top->right == NULL || top->right == pre) {
cout << top->val << " ";
s.pop();
// 将当前结点赋值为栈顶结点
cur = top;
// 将当前结点赋值为前一个访问的结点
pre = cur;
// 将当前结点赋值为空,表示已经访问过了
cur = NULL;
} else {
// 否则,将当前结点赋值为栈顶结点的右孩子
cur = top->right;
}
}
}
```
上面的代码使用了一个栈来存储结点,并使用了一个变量 `pre` 来记录上一个访问的结点,这样就可以判断右孩子是否已经访问过了。
在遍历过程中,当前结点不为空时,将结
阅读全文