用·c语言深度遍历和广度遍历实现二叉树深度的计算
时间: 2024-03-11 10:49:26 浏览: 56
c语言实现二叉树的遍历
5星 · 资源好评率100%
好的,我可以为您解答这个问题。
首先,我们需要先定义二叉树的结构体:
```c
typedef struct BinaryTree {
int data;
struct BinaryTree* left;
struct BinaryTree* right;
} BinaryTreeNode;
```
接下来,我们可以先实现深度优先遍历(DFS)来计算二叉树的深度。具体实现方式可以使用递归或栈来实现。下面是使用递归的实现方式:
```c
int maxDepth(BinaryTreeNode* root) {
if (root == NULL) { // 如果当前节点为空,则返回0
return 0;
}
int leftDepth = maxDepth(root->left); // 递归遍历左子树
int rightDepth = maxDepth(root->right); // 递归遍历右子树
return fmax(leftDepth, rightDepth) + 1; // 返回左右子树深度的最大值 + 1(加1表示当前节点的深度)
}
```
接下来,我们可以实现广度优先遍历(BFS)来计算二叉树的深度。具体实现方式可以使用队列来实现。下面是使用队列的实现方式:
```c
int maxDepth(BinaryTreeNode* root) {
if (root == NULL) { // 如果当前节点为空,则返回0
return 0;
}
int depth = 0;
Queue* queue = createQueue(); // 创建队列
enqueue(queue, root); // 根节点入队
while (!isEmpty(queue)) { // 队列不为空时
int size = getSize(queue); // 获取队列大小
for (int i = 0; i < size; i++) {
BinaryTreeNode* node = dequeue(queue); // 出队
if (node->left != NULL) {
enqueue(queue, node->left); // 左子节点入队
}
if (node->right != NULL) {
enqueue(queue, node->right); // 右子节点入队
}
}
depth++; // 遍历完一层,深度+1
}
return depth;
}
```
以上就是使用 C 语言实现二叉树深度计算的方法,希望能对您有所帮助。
阅读全文