leetcode 199. Binary Tree Right Side View 一个简单的BST的BFS应用

来源:互联网 发布:淘宝小二和闲鱼小法庭 编辑:程序博客网 时间:2024/06/06 03:01

Given a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from top to bottom.

For example:
Given the following binary tree,
1 <—
/ \
2 3 <—
\ \
5 4 <—
You should return [1, 3, 4].

这道题考察的就是最右边看到的结点,就是一个简单的BFS广度优先遍历。

代码如下:

import java.util.ArrayList;import java.util.List;/*class TreeNode {      int val;      TreeNode left;      TreeNode right;      TreeNode(int x) { val = x; }}*//* * 这个问题就是二叉树的广度优先遍历 * */public class Solution {    public List<Integer> rightSideView(TreeNode root)     {        List<Integer> res=new ArrayList<Integer>();        if(root==null)            return res;        List<TreeNode> queue=new ArrayList<TreeNode>();        queue.add(root);        while(queue.isEmpty()==false)        {            int size=queue.size();            res.add(queue.get(size-1).val);            for(int i=0;i<size;i++)            {                TreeNode one=queue.get(i);                if(one.left!=null)                    queue.add(one.left);                if(one.right!=null)                    queue.add(one.right);            }            for(int i=0;i<size;i++)                queue.remove(0);        }        return res;    }}

下面是C++的做法,就是很简单的BFS广度优先遍历的做法,

代码如下:

#include <iostream>#include <vector>#include <string>#include <map>#include <cmath>#include <queue>#include <stack>#include <algorithm>using namespace std;/*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 (root == NULL)            return res;        queue<TreeNode*> que;        que.push(root);        while (que.empty()==false)        {            int size = que.size();            res.push_back(que.back()->val);            for (int i = 0; i < size; i++)            {                TreeNode* top = que.front();                que.pop();                if (top->left != NULL)                    que.push(top->left);                if (top->right != NULL)                    que.push(top->right);            }        }        return res;    }};
原创粉丝点击