非递归创建二叉树,c语言,二叉树功能要完整
时间: 2024-08-17 22:03:29 浏览: 50
在C语言中,非递归创建二叉树通常涉及到迭代的方式来构建树结构。这种算法通常使用栈的数据结构来辅助,因为栈能够按照LIFO(Last In First Out,后进先出)的方式存储节点,非常适合遍历和插入操作。
下面是一个基本的例子,演示如何通过迭代法从给定的整数数组构造一棵二叉搜索树:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
Node* createTree(int arr[], int n) {
Node *root = NULL, *temp = NULL, *parent = NULL;
Stack *stack = createStack();
for (int i = 0; i <= n; i++) {
if (arr[i] != -1) {
stack->top = push(stack, arr[i]);
while (stack->top != NULL && parent != NULL) {
temp = pop(stack);
if (temp->data > parent->data)
parent->right = temp;
else
parent->left = temp;
parent = temp;
}
root = stack->top;
stack->top = NULL;
} else {
temp = pop(stack);
parent = temp;
}
}
return root;
}
// 其他辅助函数,如创建栈、入栈、出栈等
void inOrder(Node *node) {
// 打印节点值,然后遍历左子树和右子树
// ...
}
// 示例使用
int main() {
int arr[] = {8, 3, 10, 1, 6, 14, 4, 7, 13};
int n = sizeof(arr) / sizeof(arr[0]);
Node *root = createTree(arr, n);
inOrder(root); // 调用中序遍历展示结果
return 0;
}
```
阅读全文