在做一些算法题时,我会经常用到VS2017去测试,每次去找一个合适的二叉树觉得很麻烦,今天就自己写了一个放在博客上,下次就直接复制了
包含二叉树的建立,以及二叉树的前序遍历、中序遍历、后序遍历和层序遍历
main.c
#include <iostream>
#include <vector>
#include <string>
#include <queue>
using namespace std;
class Node {
public:
float data; // 节点数据
Node * leftChiled = nullptr; // 左孩子
Node * rightChiled = nullptr; // 右孩子
Node(float data) :data(data) {}; 构造函数
};
//先序遍历
void preOrder(Node & node) {
cout << node.data << " ";
if (node.leftChiled != nullptr) {
preOrder(*(node.leftChiled));
}
if (node.rightChiled != nullptr) {
preOrder(*(node.rightChiled));
}
}
void midOrder(Node & node) {
if (node.leftChiled != nullptr) {
midOrder(*(node.leftChiled));
}
cout << node.data << " ";
if (node.rightChiled != nullptr) {
midOrder(*(node.rightChiled));
}
}
void postOrder(Node & node) {
if (node.leftChiled != nullptr) {
postOrder(*(node.leftChiled));
}
if (node.rightChiled != nullptr) {
postOrder(*(node.rightChiled));
}
cout << node.data << " ";
}
//层序遍历
vector<vector<int>> levelOrder(Node* root) {
if (root == nullptr) return {};
vector<vector<int>> ans;
//利用q.size() 来保证当前层的元素的数目
queue<Node*> q;
q.push(root);
while (!q.empty()) {
int qSize = q.size();
ans.emplace_back(vector<int>());//先将ans插入一个空数组
for (int i = 0; i < qSize; i++) {
Node* temp = q.front();
q.pop();
ans.back().emplace_back(temp->data);//ans.back()就是刚才哪个空数组
if (temp->leftChiled) q.push(temp->leftChiled);
if (temp->rightChiled) q.push(temp->rightChiled);
}
}
return ans;
}
int main() {
//所生成的二叉树
/*
* 6(root)
* 5(one) 7(two)
* 0(three) 2(four) 9(five)
*/
//创建二叉树的根及若干节点
Node root(6);
Node one(5);
Node two(7);
Node three(0);
Node four(2);
Node five(9);
//拼接节点
root.leftChiled = &one;
root.rightChiled = &two;
one.leftChiled = &three;
one.rightChiled = &four;
two.rightChiled = &five;
//先序遍历
cout << "先序遍历结果:" << endl;
preOrder(root);
cout << endl;
cout << endl;
//中序遍历
cout << "中序遍历结果:" << endl;
midOrder(root);
cout << endl;
cout << endl;
//后序遍历
cout << "后序遍历结果:" << endl;
postOrder(root);
cout << endl;
cout << endl;
//层序遍历
cout << "层序遍历结果:" << endl;
vector<vector<int>> ans=levelOrder(&root);
for(int i=0;i<ans.size();i++)
{
for (auto data : ans[i])
cout << data<<" ";
cout << endl;
}
}