网站建设续费是什么费用体育新闻最新消息
给定一个二叉树的 根节点 root
,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
解题思路:
// 每一层的最右边数据
// 层序遍历找出每层看到的元素
/*** Definition for a binary tree node.* 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) {}* };*/
class Solution {
public:vector<int> rightSideView(TreeNode* root) {// 每一层的最右边数据// 层序遍历找出每层看到的元素vector<int> res;vector<vector<int>> level_res;level_order(root, level_res); // 获取层序遍历结果for (auto& v : level_res) {res.push_back(v.back()); // 取每一层的最后一个元素}return res;}void level_order(TreeNode* root, vector<vector<int>>& v) {if (!root) {return; // 如果根节点为空,直接返回}queue<TreeNode*> q;q.push(root); // 将根节点加入队列while (!q.empty()) {int level_size = q.size(); // 当前层的节点数量vector<int> level_v; // 存储当前层的节点值// 遍历当前层的所有节点for (int i = 0; i < level_size; i++) {auto temp = q.front();q.pop();level_v.push_back(temp->val); // 将当前节点的值加入当前层的向量// 将当前节点的左右子节点加入队列if (temp->left) q.push(temp->left);if (temp->right) q.push(temp->right);}v.push_back(level_v); // 将当前层的节点值加入结果}}
};