实验内容 1、以二叉链表作存储结构,设计求二叉树高度的算法。 2、一棵 n 个结点的完全二叉树用向量作存储结构,用非递归算法实现对该二叉树进行前 序遍历。 用c语言输出代码
时间: 2024-11-09 20:27:43 浏览: 38
二叉树的非递归遍历运算
4星 · 用户满意度95%
在C语言中,我们可以采用递归或迭代的方式来实现这两个实验内容。
1. **求二叉树高度**(非递归方式):
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
int height(TreeNode* root) {
// 如果根节点为空,高度为0
if (root == NULL) return 0;
// 左右子树的高度加一作为当前的高度,取较大值
int left_height = height(root->left);
int right_height = height(root->right);
return (left_height > right_height) ? left_height + 1 : right_height + 1;
}
int main() {
// 创建示例二叉树并计算其高度
TreeNode* tree = // 初始化二叉树...
printf("The height of the binary tree is: %d\n", height(tree));
return 0;
}
```
2. **完全二叉树前序遍历(非递归方式,用数组表示)**:
```c
#include <stdio.h>
#define MAX_TREE_SIZE 100 // 你可以根据需要调整
void preorderTraversal(int arr[], int n, int index=0) {
for (int i = 0; i < n; ++i) {
printf("%d ", arr[index]); // 遍历元素
if (index * 2 + 1 < n) { // 如果左孩子存在,继续遍历
preorderTraversal(arr, n, index * 2 + 1);
}
if (index * 2 + 2 < n && arr[index * 2 + 2] != -1) { // 如果右孩子存在,继续遍历
preorderTraversal(arr, n, index * 2 + 2);
} else { // 否则结束当前层
break;
}
}
}
int main() {
// 初始化完全二叉树到数组arr中...
int arr[MAX_TREE_SIZE];
// 填充数组并调用前序遍历
preorderTraversal(arr, n); // n为二叉树的实际结点数
return 0;
}
```
阅读全文