C语言完成(1)构造利用二叉链表存储表示的二叉树; (2)利用先序遍历创建一个二叉树; (3)递归计算二叉树的深度和叶子结点的个数。
时间: 2024-01-23 07:48:19 浏览: 120
好的,下面是C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结点
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 构造二叉树
TreeNode* constructTree() {
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
printf("请输入根节点的值:");
scanf("%d", &(root->val));
root->left = NULL;
root->right = NULL;
char ch;
printf("是否有左子树?(y/n)");
scanf(" %c", &ch);
if (ch == 'y') {
root->left = constructTree();
}
printf("是否有右子树?(y/n)");
scanf(" %c", &ch);
if (ch == 'y') {
root->right = constructTree();
}
return root;
}
// 先序遍历创建二叉树
TreeNode* createTree() {
int val;
printf("请输入节点的值(-1表示无节点):");
scanf("%d", &val);
if (val == -1) {
return NULL;
}
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = val;
node->left = createTree();
node->right = createTree();
return node;
}
// 计算二叉树的深度
int getDepth(TreeNode* root) {
if (root == NULL) {
return 0;
}
int leftDepth = getDepth(root->left);
int rightDepth = getDepth(root->right);
return leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;
}
// 计算二叉树的叶子结点个数
int getLeafNodeNum(TreeNode* root) {
if (root == NULL) {
return 0;
}
if (root->left == NULL && root->right == NULL) {
return 1;
}
return getLeafNodeNum(root->left) + getLeafNodeNum(root->right);
}
int main() {
// 构造二叉树
TreeNode* root = constructTree();
// 先序遍历创建二叉树
// TreeNode* root = createTree();
printf("二叉树的深度为:%d\n", getDepth(root));
printf("二叉树的叶子结点个数为:%d\n", getLeafNodeNum(root));
return 0;
}
```
这里提供两种方式创建二叉树:一种是构造二叉树,另一种是利用先序遍历创建。可以根据具体需求选择使用哪种方式。
阅读全文
相关推荐
















