用C语言求二叉树中的结点个数叶子结点个数某结点层次和二叉树深度完整代码
时间: 2024-11-22 20:36:40 浏览: 8
使用C语言求二叉树结点的最低公共祖先的方法
在C语言中,计算二叉树的节点总数、叶子节点数、某个特定节点所在的层次以及二叉树的深度,需要递归地遍历树结构。这里给出一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结构
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 辅助函数,用于获取节点层次
int getLevel(TreeNode* root, TreeNode* node) {
if (node == NULL) return -1; // 如果节点为空,返回-1表示未找到
if (root == node) return 0; // 根节点层次为0
int left_level = getLevel(root->left, node);
int right_level = getLevel(root->right, node);
// 返回较大的一边的层次加1
return left_level > right_level ? left_level + 1 : right_level + 1;
}
// 计算二叉树节点总数
int countNodes(TreeNode* root) {
if (root == NULL) return 0;
return 1 + countNodes(root->left) + countNodes(root->right);
}
// 计算叶子节点数
int countLeaves(TreeNode* root) {
if (root == NULL) return 0;
if (root->left == NULL && root->right == NULL) return 1; // 叶子节点直接判断
return countLeaves(root->left) + countLeaves(root->right);
}
// 计算二叉树的深度
int depthOfTree(TreeNode* root) {
if (root == NULL) return 0;
return 1 + MAX(depthOfTree(root->left), depthOfTree(root->right));
}
int main() {
// 初始化你的二叉树实例...
TreeNode* tree = ...;
printf("Total nodes: %d\n", countNodes(tree));
printf("Leaf nodes: %d\n", countLeaves(tree));
int targetNodeValue = 5; // 替换为你想要查找的节点值
TreeNode* targetNode = searchInTree(tree, targetNodeValue); // 自定义查找函数
if (targetNode != NULL) {
int level = getLevel(tree, targetNode);
printf("Level of node with value %d: %d\n", targetNodeValue, level);
}
printf("Depth of the tree: %d\n", depthOfTree(tree));
return 0;
}
```
注意,这个示例假设有一个`searchInTree`函数可以用来查找目标节点。你需要自己实现它,或者提供一个符合需求的查找算法。
阅读全文