c 语言 二叉树 非递归遍历
时间: 2023-09-30 10:06:09 浏览: 94
二叉树的非递归遍历可以使用栈来实现。以中序遍历为例,具体步骤如下:
1. 初始化一个栈,将根节点入栈。
2. 当栈不为空时,执行以下操作:
a. 取出栈顶元素(即当前子树的根节点),如果该节点有左子节点,则将左子节点入栈。
b. 如果该节点没有左子节点,则输出该节点的值,并将当前节点指向右子节点。
c. 如果当前节点的右子节点为空,并且栈顶节点的右子节点也为空,则说明该子树已经遍历完成,需要弹出栈顶元素。
3. 重复步骤2,直到栈为空。
下面是一个示例代码实现:
```c
void inorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
stack<TreeNode*> s;
TreeNode* cur = root;
while (!s.empty() || cur != NULL) {
if (cur != NULL) {
s.push(cur);
cur = cur->left;
} else {
cur = s.top();
s.pop();
printf("%d ", cur->val);
cur = cur->right;
}
}
}
```
该代码实现了中序遍历,如果需要实现其他遍历方式,只需要调整栈的操作顺序即可。
阅读全文