求二叉树的非叶子结点个数c语言
时间: 2024-12-12 10:31:27 浏览: 17
erchashu,最新c语言零基础入门(带课件源码),c语言项目
在C语言中,求二叉树的非叶子节点(也称为内部节点)的个数通常需要遍历整个二叉树。一种常见的方法是递归地访问每个节点,并减去1,因为每个非叶子节点都有两个子节点,除了根节点外。
你可以通过编写一个函数来实现这个过程,该函数接受一个二叉树结构体作为输入,返回非叶子节点的数量。下面是一个简单的示例:
```c
// 假设二叉树节点定义如下
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
int countInternalNodes(TreeNode* root) {
if (root == NULL) { // 如果根节点为空,直接返回0
return 0;
}
// 如果当前节点有左孩子和右孩子,则是非叶子节点
if (root->left && root->right) {
return 1 + countInternalNodes(root->left) + countInternalNodes(root->right);
} else {
// 只有一个子节点或没有子节点的是叶子节点,返回上一层的计数
return countInternalNodes(root->left) + countInternalNodes(root->right);
}
}
```
阅读全文