目录
前言
A.建议
1.学习算法最重要的是理解算法的每一步,而不是记住算法。
2.建议读者学习算法的时候,自己手动一步一步地运行算法。
tips:文中的(如果有)对数,则均以2为底数
B.简介
在C语言中,二叉树的前序遍历(根-左-右)非递归实现通常使用栈来辅助。
一 代码实现
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 前序遍历非递归函数
void preorderTraversalNonRecursive(TreeNode* root) {
if (root == NULL) return; // 如果根节点为空,则结束遍历
// 初始化一个栈
TreeNode *stack[1000]; // 假设二叉树深度不会超过1000
int top = -1;
// 将根节点压入栈中,并访问它
stack[++top] = root;
printf("%d ", root->val);
while (top != -1) {
// 弹出栈顶元素并检查其右孩子
TreeNode *node = stack[top--];
if (node->right) {
// 先将右孩子压入栈中(因为前序是先访问左子树)
stack[++top] = node->right;
printf("%d ", node->right->val);
}
// 然后检查该节点是否有左孩子,如果有则压入栈中
if (node->left) {
stack[++top] = node->left;
printf("%d ", node->left->val);
}
}
}
// 创建二叉树节点的辅助函数(这里省略)
int main() {
// 创建二叉树(这里假设已经创建了根节点)
// 调用前序遍历函数
preorderTraversalNonRecursive(root);
return 0;
}
请注意,在上述代码中,为了简化问题&