构造利用二叉链表存储表示的二叉树; (2)利用先序遍历创建一个二叉树; (3)递归计算二叉树的深度和叶子结点的个数。
时间: 2024-01-23 19:05:05 浏览: 78
编写采用二叉链表形式存储的二叉树的创建、先序、中序、后序和按层遍历的算法
5星 · 资源好评率100%
1. 二叉链表存储表示的二叉树
二叉链表存储表示的二叉树是指将每个结点用一个三元组表示,包括其本身的数据域和指向左右子树的两个指针。具体实现如下:
```c++
typedef struct BinaryTreeNode {
int data;
BinaryTreeNode* left;
BinaryTreeNode* right;
} BinaryTreeNode;
```
2. 先序遍历创建二叉树
先序遍历创建二叉树是指根据树的先序遍历序列创建一棵二叉树。具体实现如下:
```c++
BinaryTreeNode* createBinaryTree() {
int data;
cin >> data;
if (data == -1) { // -1 表示空结点
return NULL;
}
BinaryTreeNode* root = new BinaryTreeNode;
root->data = data;
root->left = createBinaryTree();
root->right = createBinaryTree();
return root;
}
```
3. 递归计算二叉树的深度和叶子结点个数
二叉树的深度可以通过递归求解,其深度等于左右子树深度的最大值加1。叶子结点个数可以通过递归求解,其个数等于左右子树叶子结点个数之和。
```c++
int getDepth(BinaryTreeNode* root) {
if (root == NULL) {
return 0;
}
int left = getDepth(root->left);
int right = getDepth(root->right);
return max(left, right) + 1;
}
int getLeafCount(BinaryTreeNode* root) {
if (root == NULL) {
return 0;
}
if (root->left == NULL && root->right == NULL) {
return 1;
}
int left = getLeafCount(root->left);
int right = getLeafCount(root->right);
return left + right;
}
```
阅读全文