测试二叉树结点类和二叉树类。创建控制台应用项目ex7p2,在main 函数中枸建一颗二叉树实例,输出先根、中根、后根次序及按层次遍历得到的序列。
时间: 2023-06-19 11:10:13 浏览: 89
好的,以下是二叉树结点类和二叉树类的代码实现:
```c++
#include <iostream>
#include <queue>
// 二叉树结点类
class BinaryTreeNode {
public:
BinaryTreeNode(int value) : m_value(value), m_left(nullptr), m_right(nullptr) {}
int getValue() const {
return m_value;
}
BinaryTreeNode* getLeft() const {
return m_left;
}
BinaryTreeNode* getRight() const {
return m_right;
}
void setLeft(BinaryTreeNode* left) {
m_left = left;
}
void setRight(BinaryTreeNode* right) {
m_right = right;
}
private:
int m_value;
BinaryTreeNode* m_left;
BinaryTreeNode* m_right;
};
// 二叉树类
class BinaryTree {
public:
BinaryTree(BinaryTreeNode* root) : m_root(root) {}
// 先根遍历
void preOrderTraversal(BinaryTreeNode* node) const {
if (node == nullptr) {
return;
}
std::cout << node->getValue() << " ";
preOrderTraversal(node->getLeft());
preOrderTraversal(node->getRight());
}
// 中根遍历
void inOrderTraversal(BinaryTreeNode* node) const {
if (node == nullptr) {
return;
}
inOrderTraversal(node->getLeft());
std::cout << node->getValue() << " ";
inOrderTraversal(node->getRight());
}
// 后根遍历
void postOrderTraversal(BinaryTreeNode* node) const {
if (node == nullptr) {
return;
}
postOrderTraversal(node->getLeft());
postOrderTraversal(node->getRight());
std::cout << node->getValue() << " ";
}
// 层次遍历
void levelOrderTraversal() const {
std::queue<BinaryTreeNode*> q;
q.push(m_root);
while (!q.empty()) {
BinaryTreeNode* node = q.front();
q.pop();
std::cout << node->getValue() << " ";
if (node->getLeft()) {
q.push(node->getLeft());
}
if (node->getRight()) {
q.push(node->getRight());
}
}
}
private:
BinaryTreeNode* m_root;
};
// 测试
int main() {
// 构建二叉树
BinaryTreeNode* node1 = new BinaryTreeNode(1);
BinaryTreeNode* node2 = new BinaryTreeNode(2);
BinaryTreeNode* node3 = new BinaryTreeNode(3);
BinaryTreeNode* node4 = new BinaryTreeNode(4);
BinaryTreeNode* node5 = new BinaryTreeNode(5);
BinaryTreeNode* node6 = new BinaryTreeNode(6);
BinaryTreeNode* node7 = new BinaryTreeNode(7);
node1->setLeft(node2);
node1->setRight(node3);
node2->setLeft(node4);
node2->setRight(node5);
node3->setLeft(node6);
node3->setRight(node7);
BinaryTree tree(node1);
// 先根遍历
std::cout << "先根遍历:";
tree.preOrderTraversal(node1);
std::cout << std::endl;
// 中根遍历
std::cout << "中根遍历:";
tree.inOrderTraversal(node1);
std::cout << std::endl;
// 后根遍历
std::cout << "后根遍历:";
tree.postOrderTraversal(node1);
std::cout << std::endl;
// 层次遍历
std::cout << "层次遍历:";
tree.levelOrderTraversal();
std::cout << std::endl;
return 0;
}
```
输出结果为:
```
先根遍历:1 2 4 5 3 6 7
中根遍历:4 2 5 1 6 3 7
后根遍历:4 5 2 6 7 3 1
层次遍历:1 2 3 4 5 6 7
```
阅读全文