#include <stdio.h> #include <stdlib.h> typedef struct TreeNode { int val; struct TreeNode* left; struct TreeNode* right; } TreeNode; int countNodes(TreeNode* root) { if (!root) { return 0; } return 1 + countNodes(root->left) + countNodes(root->right); } int main() { // 构造一棵二叉树 TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode)); root->val = 1; root->left = (TreeNode*)malloc(sizeof(TreeNode)); root->left->val = 2; root->left->left = NULL; root->left->right = NULL; root->right = (TreeNode*)malloc(sizeof(TreeNode)); root->right->val = 3; root->right->left = NULL; root->right->right = NULL; // 计算二叉树结点个数 int count = countNodes(root); printf("二叉树节点数为: %d\n", count); return 0; }如何增加节点数
时间: 2024-02-27 22:58:00 浏览: 149
要增加二叉树的结点数,可以通过添加新的结点来实现。具体来说,可以按照以下步骤进行:
1. 创建一个新的结点,指定其值和子节点为空。
2. 找到新结点应该插入的位置。一般来说,可以按照二叉搜索树的特点进行插入,即保证左子树结点的值小于根节点的值,右子树结点的值大于根节点的值。
3. 将新结点插入到树中。如果要插入到某个结点的左子树,就将新结点赋值给该结点的左子节点;如果要插入到某个结点的右子树,就将新结点赋值给该结点的右子节点。
以下是一个示例代码,演示如何在上述代码中添加一个新的结点:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
int countNodes(TreeNode* root) {
if (!root) {
return 0;
}
return 1 + countNodes(root->left) + countNodes(root->right);
}
int main() {
// 构造一棵二叉树
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = 1;
root->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->val = 2;
root->left->left = NULL;
root->left->right = NULL;
root->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->val = 3;
root->right->left = NULL;
root->right->right = NULL;
// 添加一个新节点
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->val = 4;
newNode->left = NULL;
newNode->right = NULL;
TreeNode* cur = root;
while (cur->left) { // 找到最左边的叶子结点
cur = cur->left;
}
cur->left = newNode; // 将新节点插入到最左边的叶子结点的左子树中
// 计算二叉树结点个数
int count = countNodes(root);
printf("二叉树节点数为: %d\n", count);
return 0;
}
```
以上代码中,在原有的二叉树基础上添加了一个值为4的新节点,插入到最左边的叶子结点的左子树中。
阅读全文