LeetCode199 二叉树的右视图

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

示例:

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

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

 

可以选择bfs或者dfs。这里用bfs,用queue实现

 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         if(root==nullptr)
14             return {};
15         vector<int> ret;
16         queue<TreeNode*> qTree;
17         int num=1;
18         qTree.push(root);
19         while(num){
20             int last_layer=num;
21             num=0;
22             while(last_layer!=1){
23                 TreeNode* temp=qTree.front();
24                 qTree.pop();
25                 if(temp->left!=nullptr){
26                     qTree.push(temp->left);
27                     ++num;
28                 }
29                 if(temp->right!=nullptr){
30                     qTree.push(temp->right);
31                     ++num;
32                 }
33                 --last_layer;
34             }
35             TreeNode* temp=qTree.front();
36             qTree.pop();
37             ret.push_back(temp->val);
38             if(temp->left!=nullptr){
39                 qTree.push(temp->left);
40                 ++num;
41             }
42             if(temp->right!=nullptr){
43                 qTree.push(temp->right);
44                 ++num;
45             }
46         }
47         return ret;
48     }
49 };

 

posted @ 2020-07-15 15:48  __rookie  阅读(130)  评论(0编辑  收藏  举报