假设二叉树采用二叉链存储结构,二叉树中结点值为单个字符且所有结点值不相同,设计二叉树的基本运算程序,包括创建二叉链,输出二叉树求二叉树的高度,求结点数和叶子结点数;并用相关数据进行测试。
时间: 2023-12-24 21:03:58 浏览: 23
二叉树基本运算程序:
```c++
#include <iostream>
using namespace std;
// 二叉树结点
struct TreeNode {
char val;
TreeNode* left;
TreeNode* right;
TreeNode(char x) : val(x), left(NULL), right(NULL) {}
};
// 创建二叉树
void createBinaryTree(TreeNode*& root) {
char val;
cin >> val;
if (val == '#') {
root = NULL;
} else {
root = new TreeNode(val);
createBinaryTree(root->left);
createBinaryTree(root->right);
}
}
// 输出二叉树
void printBinaryTree(TreeNode* root, int depth) {
if (root == NULL) {
return;
}
printBinaryTree(root->right, depth+1);
for (int i = 0; i < depth; i++) {
cout << " ";
}
cout << root->val << endl;
printBinaryTree(root->left, depth+1);
}
// 求二叉树高度
int getHeight(TreeNode* root) {
if (root == NULL) {
return 0;
}
int leftHeight = getHeight(root->left);
int rightHeight = getHeight(root->right);
return max(leftHeight, rightHeight) + 1;
}
// 求二叉树结点数
int getNodeNum(TreeNode* root) {
if (root == NULL) {
return 0;
}
return getNodeNum(root->left) + getNodeNum(root->right) + 1;
}
// 求二叉树叶子结点数
int getLeafNum(TreeNode* root) {
if (root == NULL) {
return 0;
}
if (root->left == NULL && root->right == NULL) {
return 1;
}
return getLeafNum(root->left) + getLeafNum(root->right);
}
int main() {
TreeNode* root;
createBinaryTree(root);
printBinaryTree(root, 0);
cout << "Height: " << getHeight(root) << endl;
cout << "NodeNum: " << getNodeNum(root) << endl;
cout << "LeafNum: " << getLeafNum(root) << endl;
return 0;
}
```
测试数据:
输入:A B # C # # D E # # F G # # H # #
输出:
```
H
G
F
A
E
D
C
B
Height: 4
NodeNum: 8
LeafNum: 4
```