先序遍历的非递归算法的c语言代码
时间: 2024-12-06 16:33:56 浏览: 16
先序遍历是一种树形结构访问的顺序,即根节点 -> 左子树 -> 右子树。非递归实现先序遍历通常需要借助栈数据结构。下面是一个简单的C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结点
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 非递归先序遍历函数
void preorderTraversal(TreeNode* root) {
if (root == NULL) return; // 如果根节点为空,直接返回
stack<TreeNode*> s; // 初始化空栈
s.push(root); // 将根节点入栈
while (!s.empty()) { // 当栈不为空时继续循环
TreeNode* node = s.top(); // 弹出栈顶元素
printf("%d ", node->val); // 访问当前节点值
s.pop(); // 出栈当前节点
if (node->right != NULL) s.push(node->right); // 先处理右子节点
if (node->left != NULL) s.push(node->left); // 然后处理左子节点
}
}
int main() {
// 这里假设你已经构建了一个二叉树实例并传给root指针
TreeNode* root = ...;
preorderTraversal(root);
return 0;
}
阅读全文