二叉树

This commit is contained in:
relative 2025-03-19 00:27:45 +08:00
parent 8b699d0cc4
commit eb112b33ad
2 changed files with 75 additions and 0 deletions

View File

@ -64,4 +64,70 @@ int
int max = 0, current = 0;
preorder(root, max, current);
return max;
}
vector<double> þ²æËÑË÷Ê÷::averageOfLevels(TreeNode* root)
{
vector<TreeNode*> vec{ root };
vector<double> ans;
while (!vec.empty() && vec.size() > 0) {
vector<TreeNode*> layerVec;
double value = 0;
for (int i = 0; i < vec.size(); i++) {
value += vec[i]->val;
if (vec[i]->left != nullptr)
layerVec.push_back(vec[i]->left);
if (vec[i]->right != nullptr)
layerVec.push_back(vec[i]->right);
}
if (vec.size() > 0)
ans.push_back(value / vec.size());
vec = layerVec;
}
return ans;
}
vector<int> þ²æËÑË÷Ê÷::rightSideView(TreeNode* root) {
vector<TreeNode*> vec{ root };
vector<int> ans;
if (root == nullptr)
return ans;
while (!vec.empty() && vec.size() > 0) {
vector<TreeNode*> layerVec;
for (int i = 0; i < vec.size(); i++) {
if (vec[i]->right != nullptr)
layerVec.push_back(vec[i]->right);
if (vec[i]->left != nullptr)
layerVec.push_back(vec[i]->left);
}
if (vec.size() > 0)
ans.push_back(vec[0]->val);
vec = layerVec;
}
return ans;
}
vector<vector<int>> þ²æËÑË÷Ê÷::zigzagLevelOrder(TreeNode* root) {
vector<TreeNode*> vec{ root };
vector<vector<int>> ans;
if (root == nullptr)
return ans;
int row = 0;
while (!vec.empty() && vec.size() > 0) {
vector<TreeNode*> layerVec;
vector<int> list;
for (int i = 0; i < vec.size(); i++) {
list.push_back(vec[i]->val);
if (vec[i]->right != nullptr)
layerVec.push_back(vec[i]->right);
if (vec[i]->left != nullptr)
layerVec.push_back(vec[i]->left);
}
if (row % 2 == 0)
reverse(list.begin(), list.end());
ans.push_back(list);
vec = layerVec;
row++;
}
return ans;
}

View File

@ -1,4 +1,7 @@
#pragma once
#include <vector>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
@ -15,5 +18,11 @@ public:
int getMinimumDifference(TreeNode* root);
// 104. 二叉树的最大深度
int maxDepth(TreeNode* root);
// 637. 二叉树的层平均值
vector<double> averageOfLevels(TreeNode* root);
// 199. 二叉树的右视图
vector<int> rightSideView(TreeNode* root);
// 103. 二叉树的锯齿形层序遍历
vector<vector<int>> zigzagLevelOrder(TreeNode* root);
};