题解 | #输出二叉树的右视图#
输出二叉树的右视图
https://www.nowcoder.com/practice/c9480213597e45f4807880c763ddd5f0
解题思路:先建树,再使用层序遍历获得右视图
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 求二叉树的右视图 * @param xianxu int整型vector 先序遍历 * @param zhongxu int整型vector 中序遍历 * @return int整型vector */ TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) { int m = pre.size(); int n = vin.size(); if(m == 0 || n == 0) { return nullptr; } TreeNode *s = new TreeNode(pre[0]); for(int i = 0;i<vin.size();++i) { if(vin[i] == pre[0]) { vector<int> preleft(pre.begin()+1,pre.begin()+i+1); vector<int> vinleft(vin.begin(),vin.begin()+i); s->left = reConstructBinaryTree(preleft,vinleft); vector<int> preright(pre.begin()+i+1,pre.end()); vector<int> vinright(vin.begin()+i+1,vin.end()); s->right = reConstructBinaryTree(preright,vinright); } } return s; } vector<int> solve(vector<int>& xianxu, vector<int>& zhongxu) { // write code here TreeNode *root = reConstructBinaryTree(xianxu,zhongxu); vector<int> res; queue<TreeNode*> q; q.push(root); TreeNode *cur; //层序遍历的最后一个结点就是右视图 while(!q.empty()) { int n = q.size(); for(int i = 0;i<n;++i) { cur = q.front(); if(i == n-1) res.push_back(cur->val); q.pop(); if(cur->left) q.push(cur->left); if(cur->right) q.push(cur->right); } } return res; } };