构造利用二叉链表存储表示的二叉树; (2)利用先序遍历创建一个二叉树; (3)递归计算二叉树的深度和叶子结点的个数。
时间: 2024-01-23 08:05:05 浏览: 66
编写采用二叉链表形式存储的二叉树的创建、先序、中序、后序和按层遍历的算法
5星 · 资源好评率100%
1. 构造二叉链表存储表示的二叉树
二叉链表存储表示的二叉树是指每个节点除了存储数据之外,还存储着其左右子节点的地址。下面是一个例子:
```
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
```
2. 利用先序遍历创建一个二叉树
先序遍历的顺序是 根-左-右,我们可以利用这个顺序来创建一个二叉树。具体做法是,先读取一个节点的数值,然后递归地创建其左右子树。
```
TreeNode* createTree() {
int val;
cin >> val;
if (val == -1) { // 如果输入的是-1,表示这个节点为空
return nullptr;
}
auto root = new TreeNode(val);
root->left = createTree(); // 递归创建左子树
root->right = createTree(); // 递归创建右子树
return root;
}
```
3. 递归计算二叉树的深度和叶子结点的个数
二叉树的深度可以通过递归求解,每次递归时将当前节点的深度加1并返回左右子树深度中的最大值。
```
int getDepth(TreeNode* root) {
if (!root) {
return 0;
}
return 1 + max(getDepth(root->left), getDepth(root->right));
}
```
二叉树的叶子节点是指没有左右子树的节点,同样可以通过递归求解。每次递归时,如果当前节点是叶子节点,则返回1,否则返回左右子树叶子节点个数之和。
```
int getLeafCount(TreeNode* root) {
if (!root) {
return 0;
}
if (!root->left && !root->right) { // 叶子节点
return 1;
}
return getLeafCount(root->left) + getLeafCount(root->right);
}
```
阅读全文