2026/3/30 17:43:09
网站建设
项目流程
网站建设模版 优帮云,微信如何自己创建公众号,重庆市建设工程信息网 施工许可,网站怎么加链接思路#xff1a;1.BFS#xff0c;使用队列模拟BFS#xff0c;层序遍历二叉树#xff0c;从右子树开始遍历#xff0c;每层第一个访问的就是最右边的那个结点。2.DFS#xff0c;使用栈模拟DFS#xff0c;从右子树开始遍历#xff0c;遍历到底。对树进行深度优先搜索1.BFS使用队列模拟BFS层序遍历二叉树从右子树开始遍历每层第一个访问的就是最右边的那个结点。2.DFS使用栈模拟DFS从右子树开始遍历遍历到底。对树进行深度优先搜索在搜索过程中总是先访问右子树。那么对于每一层来说我们在这层见到的第一个结点一定是最右边的结点。3.都需要知道当前结点在哪一层所以要用map记录。可以存储在每个深度访问的第一个结点一旦我们知道了树的层数就可以得到最终的结果数组。//BFS /** * 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: vectorint rightSideView(TreeNode* root) { if(rootnullptr) return {}; unordered_mapint,int num; queuepairTreeNode*,int node_depth; node_depth.push({root,0}); int maxdep-1; while(!node_depth.empty()){ auto pnode_depth.front(); node_depth.pop(); TreeNode* nodp.first; int depp.second; if(nod!nullptr){ maxdepmax(maxdep,dep); if(num.find(dep) num.end()){ num[dep]nod-val; } node_depth.push({nod-right,dep1}); node_depth.push({nod-left,dep1}); } } vectorint rightsort; for(int i0;imaxdep;i){ rightsort.push_back(num[i]); } return rightsort; } }; //DFS class Solution { public: vectorint rightSideView(TreeNode* root) { if(rootnullptr) return {}; unordered_mapint,int num; stackpairTreeNode*,int node_depth; node_depth.push({root,0}); int maxdep-1; while(!node_depth.empty()){ auto pnode_depth.top(); node_depth.pop(); TreeNode* nodp.first; int depp.second; if(nod!nullptr){ maxdepmax(maxdep,dep); if(num.find(dep) num.end()){ num[dep]nod-val; } node_depth.push({nod-left,dep1}); node_depth.push({nod-right,dep1}); } } vectorint rightsort; for(int i0;imaxdep;i){ rightsort.push_back(num[i]); } return rightsort; } };