按层次遍历二叉树,打印结点所在的层次,并求该二叉树的宽度,用c语言编程该程序
时间: 2024-12-16 22:22:08 浏览: 68
在C语言中,你可以使用队列数据结构来实现二叉树按层次遍历并计算宽度。这里是一个简单的示例程序,它使用了广度优先搜索(BFS)算法:
```c
#include <stdio.h>
#include <stdlib.h>
#include <queue>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 宽度函数,返回给定树的宽度
int widthOfBinaryTree(TreeNode* root) {
if (root == NULL) return 0; // 空树的情况
int level = 1, current_level = 1, max_width = 1; // 初始化层数、当前层数和最大宽度
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
int size = q.size(); // 当前层节点数量
for (int i = 0; i < size; ++i) {
TreeNode* node = q.front();
q.pop();
if (node->left != NULL)
q.push(node->left);
if (node->right != NULL)
q.push(node->right);
max_width = (max_width > current_level) ? max_width : current_level; // 更新最大宽度
}
current_level++; // 进入下一层
}
return max_width; // 返回树的最大宽度
}
void printLevelOrder(TreeNode* root) {
if (root == NULL) return;
int level = 0;
queue<pair<int, TreeNode*>> q;
q.push({level++, root});
while (!q.empty()) {
level++;
int size = q.size();
printf("Level %d: ", level);
for (int i = 0; i < size; ++i) {
TreeNode* node = q.front().second;
printf("%d ", node->val); // 打印节点值
if (node->left) q.push({level, node->left});
if (node->right) q.push({level, node->right});
q.pop();
}
printf("\n");
}
}
int main() {
// 创建二叉树实例并初始化...
TreeNode* root = createYourTree(); // 实际上你需要自己定义如何创建树的函数
printLevelOrder(root);
int treeWidth = widthOfBinaryTree(root);
printf("The maximum width of the binary tree is %d.\n", treeWidth);
return 0;
}
```
在这个程序中,`printLevelOrder` 函数用于按层次打印节点值,而 `widthOfBinaryTree` 函数负责计算宽度。记得替换 `createYourTree()` 为实际的二叉树构造函数。
阅读全文
相关推荐


















