已知以二叉链表作存储结构,使用C++语言创建二叉树,并实现二叉树的树的高度以及统计二叉树叶节点数量的功能,并输入先序遍历序列ABCDEFGI来进行测试
时间: 2024-12-15 17:15:40 浏览: 12
在C++中,我们可以使用递归的方式创建二叉搜索树(BST),并计算其高度和叶子节点的数量。首先,我们需要定义一个二叉链表节点(Node)和二叉树节点(BinaryTreeNode)。假设每个节点包含一个键值(key)、左指针和右指针。
```cpp
class BinaryTreeNode {
public:
int key;
BinaryTreeNode* left;
BinaryTreeNode* right;
// 构造函数
BinaryTreeNode(int val) : key(val), left(nullptr), right(nullptr) {}
};
// 插入节点到BST
BinaryTreeNode* insert(BinaryTreeNode* root, int key) {
if (root == nullptr) {
return new BinaryTreeNode(key);
}
if (key < root->key)
root->left = insert(root->left, key);
else
root->right = insert(root->right, key);
return root;
}
// 计算树的高度
int height(BinaryTreeNode* root) {
if (root == nullptr)
return 0;
int leftHeight = height(root->left);
int rightHeight = height(root->right);
return std::max(leftHeight, rightHeight) + 1;
}
// 判断是否是叶子节点
bool isLeaf(BinaryTreeNode* node) {
return node->left == nullptr && node->right == nullptr;
}
// 统计叶子节点数
int countLeaves(BinaryTreeNode* root) {
if (root == nullptr)
return 0;
return countLeaves(root->left) + countLeaves(root->right) + isLeaf(root);
}
// 先序遍历
void preOrderTraversal(BinaryTreeNode* root) {
if (root != nullptr) {
cout << root->key;
preOrderTraversal(root->left);
preOrderTraversal(root->right);
}
}
int main() {
// 使用先序遍历序列构建树
BinaryTreeNode* root = nullptr;
for (char ch : {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'I'}) {
root = insert(root, ch - 'A');
}
// 计算并打印树的高度
int heightVal = height(root);
cout << "Tree Height: " << heightVal << endl;
// 统计并打印叶节点数量
int leafCount = countLeaves(root);
cout << "Number of leaves: " << leafCount << endl;
// 打印先序遍历结果
preOrderTraversal(root);
cout << endl;
return 0;
}
```
当你运行这个程序,它会根据给定的先序遍历序列(ABCDEFGI)构建二叉搜索树,然后显示树的高度和叶子节点数。先序遍历的结果将会按照ABCDEFIG的顺序输出。
阅读全文