利用二叉链表结构构建二叉树,实现前序、中序和后续遍历算法,并运用遍历算法实现二叉树的其他操作,如计算二叉树结点个数,叶子结点个数,二叉树的高度等
时间: 2024-11-09 10:08:41 浏览: 39
链表先序建立二叉树,得到中序后序输出,递归和非递归实现(C++代码加设计报告)
5星 · 资源好评率100%
在C++中,我们可以使用二叉链表(每个节点包含两个指针,分别指向左子节点和右子节点)来构造二叉树。首先,我们需要定义一个二叉树节点的结构体或类:
```cpp
struct TreeNode {
int val; // 节点值
TreeNode* left; // 左子节点
TreeNode* right; // 右子节点
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} // 构造函数
};
```
接下来,我们可以实现三种基本的遍历算法:
1. 前序遍历 (Preorder): 访问根 -> 左子树 -> 右子树
```cpp
void preorderTraversal(TreeNode* root) {
if (root == nullptr) return;
std::cout << root->val << " "; // 先访问根
preorderTraversal(root->left);
preorderTraversal(root->right);
}
```
2. 中序遍历 (Inorder): 左子树 -> 访问根 -> 右子树
```cpp
void inorderTraversal(TreeNode* root) {
if (root == nullptr) return;
inorderTraversal(root->left);
std::cout << root->val << " ";
inorderTraversal(root->right);
}
```
3. 后续遍历 (Postorder): 左子树 -> 右子树 -> 访问根
```cpp
void postorderTraversal(TreeNode* root) {
if (root == nullptr) return;
postorderTraversal(root->left);
postorderTraversal(root->right);
std::cout << root->val << " ";
}
```
对于其他二叉树操作,例如计算节点数量、叶子节点数量和高度:
- 计算节点总数 (Number of nodes)
```cpp
int countNodes(TreeNode* root) {
if (root == nullptr) return 0;
return 1 + countNodes(root->left) + countNodes(root->right);
}
```
- 计算叶子节点数量 (Number of leaves)
```cpp
int countLeaves(TreeNode* root) {
if (root == nullptr || (root->left == nullptr && root->right == nullptr)) return 1;
return countLeaves(root->left) + countLeaves(root->right);
}
```
- 计算二叉树高度 (Height)
```cpp
int height(TreeNode* root) {
if (root == nullptr) return 0;
int left_height = height(root->left);
int right_height = height(root->right);
return std::max(left_height, right_height) + 1;
}
```
阅读全文