LeetCode 199 二叉树的右视图

题目:

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

示例:

输入: [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> ans;
if(root == NULL)
return ans;
int front=-,rear=-;
int last=,lever=;
//
TreeNode* Q[]; //1、用一个数组来模拟队列,当然用其他的数据结构也行,但这里若用vector<TreeNode*> 会报错,因为vector中用指针不安全,具体原因未知
Q[++rear] = root;
TreeNode *p = root;
while(front < rear){
p = Q[++front];
if(p->left != NULL)
Q[++rear] = p->left;
if(p->right)
Q[++rear] = p->right;
if(last == front){ //2、巧妙之处。在这个语句框中,可以求高度,如level,反向if即可累加计算每一层节点总个数,还可进行比较求树的最大宽度
ans.push_back(Q[front]->val);
last=rear;
lever++;
}
}
return ans;
}
};
上一篇:linux环境下jdk 安装以及maven私服搭建


下一篇:发布APP到app store