二叉树前序遍历非递归怎么实现,请给出完整C语言代码
时间: 2023-02-05 14:30:25 浏览: 124
非递归实现二叉树前序遍历的方法是使用栈进行模拟递归的过程。具体步骤如下:
1. 将根节点入栈。
2. 取出栈顶节点并访问。
3. 如果栈顶节点有右子节点,就将右子节点入栈。
4. 如果栈顶节点有左子节点,就将左子节点入栈。
5. 重复步骤 2~4 直到栈为空。
下面是用 C 语言实现二叉树前序遍历的非递归代码:
```
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树的节点结构
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
// 创建二叉树
// 传入的数组是前序遍历的结果
struct TreeNode* createTree(int* preorder, int preorderSize) {
if (preorderSize == 0) return NULL; // 空树
// 创建根节点
struct TreeNode* root = (struct TreeNode*) malloc(sizeof(struct TreeNode));
root->val = preorder[0];
// 在前序遍历序列中找到第一个大于根节点的元素,
// 该元素之前的元素对应根节点的左子树,之后的元素对应根节点的右子树
int i;
for (i = 1; i < preorderSize; i++) {
if (preorder[i] > root->val) break;
}
// 递归创建左右子树
root->left = createTree(preorder + 1, i - 1);
root->right = createTree(preorder + i, preorderSize - i);
return root;
}
// 二叉树前序遍历的非递归实现
阅读全文