用C语言或者c++,二叉树的基本操作(1)创建链式存储的二叉树,用户输入字符串,程序按照先序遍历的顺序遍历字符串并建立对应结构的二叉树(2)二叉链表的三种遍历方法:前序遍历、中序遍历、后序遍历(3)计算给定二叉树的深度、结点个数。
时间: 2024-12-02 22:15:07 浏览: 22
在C语言或C++中,我们可以使用结构体表示二叉树节点,并通过链式存储来构建二叉树。以下是基本的操作步骤:
**1. 创建链式存储的二叉树 (先序遍历)**:
首先,我们需要定义一个二叉树节点结构:
```c++
#include <stdio.h>
typedef struct TreeNode {
char data;
struct TreeNode* left;
struct TreeNode* right;
} Node;
```
然后,你可以让用户输入字符,每次输入一个字符作为新节点的值,左孩子为空表示左子树,右孩子为空表示右子树。例如,对于"ABCD",会形成如下结构:
```
A
/ \
B C
/ \
D
```
**2. 二叉链表的三种遍历方法**
- **先序遍历 (Preorder)**: 先访问根节点,再递归地访问左子树和右子树。
- **中序遍历 (Inorder)**: 先递归地访问左子树,然后访问根节点,最后访问右子树。
- **后序遍历 (Postorder)**: 先递归地访问左子树和右子树,最后访问根节点。
遍历函数实现如下(以先序遍历为例):
```c++
void preorder(Node* root) {
if (root != NULL) {
printf("%c", root->data);
preorder(root->left);
preorder(root->right);
}
}
```
其他两种遍历方法类似,只需调整递归的顺序。
**3. 计算二叉树的深度和结点个数**
- **深度 (Height)**: 可以使用递归的方式,如果根节点为空则深度为0,否则递增左右子树的最大深度加1。
- **结点个数 (Node Count)**: 使用递归或迭代的方式,从根开始累加每个节点的计数,左右子树分别递增。
```c++
int treeDepth(Node* root) {
return root == NULL ? 0 : 1 + max(treeDepth(root->left), treeDepth(root->right));
}
int countNodes(Node* root) {
return root == NULL ? 0 : 1 + countNodes(root->left) + countNodes(root->right);
}
```
阅读全文