码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 199 二叉树的右视图

时间:2019-04-08 01:01:15      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:自己   push   解题思路   ==   思路   输入   col   bin   dev   

题目:

给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

示例:

输入: [1,2,3,null,5,null,4]
输出: [1, 3, 4]
解释:

   1            <---
 /   2     3         <---
 \       5     4       <---

解题思路:

层次遍历。每次记录每一层的最右边的那个节点,并输出。这里介绍一个非常好用的模板,这个板子可以用来求高度、某一层节点的个数、树的最大宽度等。

代码:

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12     vector<int> rightSideView(TreeNode* root) {
13         vector<int> ans;
14         if(root == NULL)
15             return ans;
16         int front=-1,rear=-1;
17         int last=0,lever=0;
18         //
19         TreeNode* Q[1000];  //1、用一个数组来模拟队列,当然用其他的数据结构也行,但这里若用vector<TreeNode*> 会报错,因为vector中用指针不安全,具体原因未知
20         Q[++rear] = root;
21         TreeNode *p = root;
22         while(front < rear){
23             p = Q[++front];
24             if(p->left != NULL)
25                 Q[++rear] = p->left;
26             if(p->right)
27                 Q[++rear] = p->right;
28             if(last == front){  //2、巧妙之处。在这个语句框中,可以求高度,如level,反向if即可累加计算每一层节点总个数,还可进行比较求树的最大宽度
29                 ans.push_back(Q[front]->val);
30                 last=rear;
31                 lever++;
32             }
33         }
34         return ans;
35     }
36 };

 

LeetCode 199 二叉树的右视图

标签:自己   push   解题思路   ==   思路   输入   col   bin   dev   

原文地址:https://www.cnblogs.com/moxiangfeng/p/10668208.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!