c++实现二叉树要求实现以下功能:1. 利用先序遍历的方式构造二叉树。2. 实现二叉树的先序遍历输出。3. 实现二叉树的中序遍历输出。4. 实现二叉树的后序遍历输出。5. 计算二叉树的深度。6. 统计二叉树的结
时间: 2024-11-28 10:21:20 浏览: 19
在C++中实现二叉树的基本结构和遍历操作,首先我们需要定义一个二叉树节点的结构体,包含左孩子、右孩子和值。然后我们可以按照以下步骤来完成所需的功能:
1. **二叉树节点定义**:
```cpp
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
```
2. **构造函数及先序遍历**:
- 先序遍历(根-左-右):
```cpp
void buildTreePreorder(TreeNode*& root, vector<int>& inorder, int start, int end) {
if (start > end)
return;
int val = inorder[start];
root = new TreeNode(val);
int i = lower_bound(inorder.begin(), inorder.end(), val) - inorder.begin();
buildTreePreorder(root->left, inorder, start + 1, i - 1);
buildTreePreorder(root->right, inorder, i + 1, end);
}
```
这里假设`inorder`是一个已经排序的数组,它表示了二叉树的中序遍历结果。
3. **遍历函数**:
- 中序遍历(左-根-右):
```cpp
void printInorder(TreeNode* root) {
if (root == nullptr)
return;
printInorder(root->left);
cout << root->val << " ";
printInorder(root->right);
}
// 后序遍历(左-右-根)
void printPostorder(TreeNode* root) {
if (root == nullptr)
return;
printPostorder(root->left);
printPostorder(root->right);
cout << root->val << " ";
}
```
4. **计算深度和统计结点**:
- 深度计算:
```cpp
int maxDepth(TreeNode* root) {
if (root == nullptr)
return 0;
return 1 + max(maxDepth(root->left), maxDepth(root->right));
}
- 结点数统计(递归实现):
int countNodes(TreeNode* root) {
if (root == nullptr)
return 0;
return 1 + countNodes(root->left) + countNodes(root->right);
}
```
注意,在实际应用中,你可以选择使用迭代的方式来替代递归,以避免栈溢出的问题。
阅读全文