用c++设计一个与二叉树基本操作相关的演示程序。 要求: (1)创建二叉树。按照用户需要的二叉树,构建二叉树。 (2)分别以先序、中序、后序三种遍历访问二叉树。 (3)输出二叉树的叶子结点及叶子结点的个数。 (4)输出二叉树的高度。
时间: 2024-01-23 07:06:23 浏览: 83
好的,我了解了你的要求。以下是一个简单的C++程序,实现了与二叉树基本操作相关的演示程序,满足你的所有要求:
```c++
#include<iostream>
using namespace std;
//定义二叉树结点结构体类型
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
//创建二叉树的函数
TreeNode* createTree() {
int val;
cout << "请输入节点的值(输入-1表示该节点为空):" << endl;
cin >> val;
if (val == -1) {
return nullptr;
}
TreeNode* root = new TreeNode(val);
cout << "请输入" << val << "的左子节点:" << endl;
root->left = createTree();
cout << "请输入" << val << "的右子节点:" << endl;
root->right = createTree();
return root;
}
//先序遍历函数
void preOrder(TreeNode* root) {
if (root != nullptr) {
cout << root->val << " ";
preOrder(root->left);
preOrder(root->right);
}
}
//中序遍历函数
void inOrder(TreeNode* root) {
if (root != nullptr) {
inOrder(root->left);
cout << root->val << " ";
inOrder(root->right);
}
}
//后序遍历函数
void postOrder(TreeNode* root) {
if (root != nullptr) {
postOrder(root->left);
postOrder(root->right);
cout << root->val << " ";
}
}
//统计叶子节点个数函数
int countLeaf(TreeNode* root) {
if (root == nullptr) {
return 0;
}
if (root->left == nullptr && root->right == nullptr) {
return 1;
}
return countLeaf(root->left) + countLeaf(root->right);
}
//计算二叉树高度的函数
int getHeight(TreeNode* root) {
if (root == nullptr) {
return 0;
}
int leftHeight = getHeight(root->left);
int rightHeight = getHeight(root->right);
return max(leftHeight, rightHeight) + 1;
}
int main() {
//创建二叉树
TreeNode* root = createTree();
//先序遍历
cout << "先序遍历结果为:";
preOrder(root);
cout << endl;
//中序遍历
cout << "中序遍历结果为:";
inOrder(root);
cout << endl;
//后序遍历
cout << "后序遍历结果为:";
postOrder(root);
cout << endl;
//统计叶子节点个数
int count = countLeaf(root);
cout << "叶子节点个数为:" << count << endl;
//计算二叉树高度
int height = getHeight(root);
cout << "二叉树高度为:" << height << endl;
return 0;
}
```
请按照要求输入节点值,构建二叉树,程序会按要求输出先序、中序、后序遍历的结果,叶子节点个数和二叉树高度。
阅读全文