本文最后更新于 426 天前,其中的信息可能已经有所发展或是发生改变。
持续更新中…
- greed.h
# ifndef GREED_H_
# define GREED_H_
#include <iostream>
#include <vector>
#include <string>
#include <queue>
using std::vector;
using std::string;
using std::queue;
using std::cout;
using std::endl;
struct TreeNode
{
int val;
TreeNode* left;
TreeNode* right;
TreeNode() : val(0), left(nullptr), right(nullptr) {}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
TreeNode(int x, TreeNode* left, TreeNode* right) : val(x), left(left), right(right) {}
};
// Create Binary Tree with Vector
TreeNode* constructBinaryTree(const vector<int>& vec);
// Pring Binary Tree
void printBinaryTree(TreeNode* root);
void print2DVector(vector<vector<int>>& vec);
void printVector(vector<int>& vec);
# endif
- greed.cpp
#include "greed.h"
// 根据数组构造二叉树
TreeNode* constructBinaryTree(const vector<int>& vec){
vector<TreeNode*> vecTree(vec.size(), nullptr); // 根据数组大小构造二叉树指针数组
TreeNode* root = nullptr; // 将根节点指针定义为 nullptr
// 创建树节点
for (int i = 0; i < vec.size(); i++){ // 遍历数组
TreeNode* node = nullptr; // 初始化节点为 nullptr
if (vec[i] != -1) node = new TreeNode(vec[i]); // 如果当前元素不是-1, 创建一个新节点,其值为 vec[i]
vecTree[i] = node; // 将新节点放入 vecTree 数组中
if (i == 0) root = node; // 如果是第一个元素,则将其设为根节点
}
// 连接节点形成树
for (int i = 0; i * 2 + 1 < vec.size(); i++)
{
if (vecTree[i] != nullptr){
if (i * 2 + 1 < vec.size()) vecTree[i]->left = vecTree[i * 2 + 1]; // 设置左孩子
if (i * 2 + 2 < vec.size()) vecTree[i]->right = vecTree[i * 2 + 2]; // 设置左孩子
}
}
return root; // 返回构造二叉树的根节点
}
// 层序打印二叉树
void printBinaryTree(TreeNode* root)
{
queue<TreeNode*> que;
if (root != nullptr) que.push(root); // 如果二叉树根节点不为空,将其放入 que 队列
vector<vector<int>> result; // 存放二叉树结果的二维数组
while (!que.empty()){
int size = que.size(); // 统计每层队列大小
vector<int> vec; // 存放每层
for (int i = 0; i < size; i++){
TreeNode* node = que.front();
que.pop();
if (node != nullptr){
vec.push_back(node->val);
que.push(node->left);
que.push(node->right);
}
else
vec.push_back(-1);
}
result.push_back(vec);
}
for (int i = 0; i < result.size(); i++){
for (int j = 0; j < result[i].size(); j++){
std::cout << result[i][j] << " ";
}
std::cout << std::endl;
}
}
void print2DVector(vector<vector<int>>& vec){
if (vec.size() == 0){
cout << "[]\n";
return;
}
cout << "[";
for (int i = 0; i < vec.size(); i++){
cout << "[";
for (int j = 0; j < vec[i].size(); j++){
if (j == vec[i].size() - 1)
cout << vec[i][j];
else
cout << vec[i][j] << ", ";
}
if (i == vec.size() - 1)
cout << "]]\n";
else
cout << "], ";
}
}
void printVector(vector<int>& vec){
if (vec.size() == 0){
cout << "[]\n";
return;
}
cout << "[";
for (int i = 0; i < vec.size(); i++){
if (i == vec.size() - 1)
cout << vec[i];
else
cout << vec[i] << ", ";
}
cout << "]\n";
}