199. 二叉树的右视图
方法有很多
1,递归求二叉树的深度,然后从右边看是先遍历,也就是右序遍历一个颗二叉树,到最深度,然后到左边去遍历,从右边树+1的深度开始,加入数组。
2,层序遍历一颗二叉树,每层打印一个换行符,注意标记号每层最后一个节点。用一个队列实现,用一个哨兵来标记最后的每层最后的一个节点。
难度中等
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例:
输入: [1,2,3,null,5,null,4] 输出: [1, 3, 4] 解释: 1 <--- / \ 2 3 <--- \ \ 5 4 <---
代码如下
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> rightSideView(TreeNode* root) {
vector<int>res;
if (NULL == root) return res;
queue<TreeNode*> que;
que.push(root);
auto last = root;
auto nlast = root;
while (!que.empty()){
auto q = que.front();
que.pop();
if(q->left){
que.push(q->left);
nlast=que.back();
}
if(q->right){
que.push(q->right);
nlast=que.back();
}
if(q == last ){
res.push_back(q->val);
last=nlast;
}
}
return res;
}
};
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
void solve(TreeNode*p,int high,vector<int>& num)
{
if(p == NULL)
return ;
if(high > num.size())
{
num.push_back(p->val);
}
solve(p->right,high+1,num);
solve(p->left,high+1,num);
}
vector<int> rightSideView(TreeNode* root) {
vector<int> num;
solve(root,1,num);
return num;
}
};
作者:Nagi_Deng
链接:https://leetcode-cn.com/problems/binary-tree-right-side-view/solution/si-lu-qing-xi-jie-fa-jian-dan-csuan-fa-by-nagi_den/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

浙公网安备 33010602011771号