写出c++代码设计二叉树,要求定义二叉树存储结构,建立二叉链表存储的二叉树并实现二叉树的先序遍历,中序遍历,后序遍历并实现二叉树的高度,求结点双亲,统计叶子结点数目,打印二叉树等操作,最后编写测试主函数
时间: 2024-11-04 19:09:38 浏览: 14
链表先序建立二叉树,得到中序后序输出,递归和非递归实现(C++代码加设计报告)
首先,我们定义一个二叉树节点的结构体 `Node`:
```cpp
#include <iostream>
using namespace std;
struct Node {
int data;
Node* left;
Node* right;
Node(int value) : data(value), left(nullptr), right(nullptr) {}
};
```
接下来,我们创建二叉树类 `BinaryTree` 并实现所需功能:
```cpp
class BinaryTree {
public:
// 构造函数
BinaryTree() : root(nullptr) {}
// 插入节点
void insert(int value) {
root = insertNode(root, value);
}
// 先序遍历
void preOrderTraversal(Node* node) {
if (node != nullptr) {
cout << node->data << " ";
preOrderTraversal(node->left);
preOrderTraversal(node->right);
}
}
// 中序遍历
void inOrderTraversal(Node* node) {
if (node != nullptr) {
inOrderTraversal(node->left);
cout << node->data << " ";
inOrderTraversal(node->right);
}
}
// 后序遍历
void postOrderTraversal(Node* node) {
if (node != nullptr) {
postOrderTraversal(node->left);
postOrderTraversal(node->right);
cout << node->data << " ";
}
}
// 高度
int height(Node* node) {
if (node == nullptr)
return 0;
return 1 + max(height(node->left), height(node->right));
}
// 求结点双亲
Node* findParent(Node* node, int target) {
if (!node || node->data == target)
return nullptr;
if (target < node->data)
return findParent(node->left, target);
return findParent(node->right, target);
}
// 统计叶子结点
int countLeaves(Node* node) {
if (node == nullptr)
return 0;
if (node->left == nullptr && node->right == nullptr)
return 1;
return countLeaves(node->left) + countLeaves(node->right);
}
// 打印二叉树
void printTree() {
preOrderTraversal(root);
cout << "\n";
inOrderTraversal(root);
cout << "\n";
postOrderTraversal(root);
cout << "\n";
cout << "Height: " << height(root) << "\n";
if (root) {
Node* parent = findParent(root, 9); // 使用某个节点作为例子,这里假设有一个9节点
cout << "Parent of node with value 9: " << (parent ? parent->data : "Not found") << "\n";
}
cout << "Number of leaves: " << countLeaves(root) << "\n";
}
private:
Node* insertNode(Node* node, int value) {
if (not node) {
return new Node(value);
}
if (value < node->data) {
node->left = insertNode(node->left, value);
} else if (value > node->data) {
node->right = insertNode(node->right, value);
}
return node;
}
Node* root; // 根节点
};
```
最后,编写测试主函数:
```cpp
int main() {
BinaryTree bt;
bt.insert(5);
bt.insert(3);
bt.insert(7);
bt.insert(2);
bt.insert(4);
bt.insert(6);
cout << "Binary Tree Operations:\n";
bt.printTree();
return 0;
}
```
这段代码将创建一个简单的二叉树,并演示了如何执行各种遍历、高度计算、父节点查找和叶子节点计数的操作。
阅读全文