Leetcode 199: Binary Tree Right Side View

来源:互联网 发布:规模以上 知乎 编辑:程序博客网 时间:2024/04/26 23:30

Problem:

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].

Credits:
Special thanks to @amrsaqr for adding this problem and creating all test cases.

分析:
其实本题比较简单,Right Side View即输出每一行最右边的一个元素。对树进行层次遍历,输出每层最右边一个元素即可。
算法如下:
0)空集合A、B,以及空的返回集合C。
1)将树根元素加入到集合A。
2)对集合A中的每一个元素,依次取其左、右子节点,加入到集合B。
3)将集合A最右边的一个元素加入到集合C中。
4)交换集合A、B。清空集合B。
5)重复第2、3、4步,直到集合A为空。
6)集合C中存放的元素即为该树的右视图。

代码如下,运行时间为10ms。

class Solution {public:    vector<int> rightSideView(TreeNode *root) {        vector<int> result;        vector<TreeNode*> hirency;         vector<TreeNode*> tmp;        vector<TreeNode*> swap;        if (root != NULL)            hirency.push_back(root);        while (hirency.size() >0)        {            for (int i=0; i<hirency.size(); i++)            {                TreeNode * node = hirency.at(i);                if(node->left) tmp.push_back(node->left);                if(node->right) tmp.push_back(node->right);            }            result.push_back(hirency.at(hirency.size()-1)->val);            hirency.clear();            swap = hirency;            hirency = tmp;            tmp = swap;        }        return result;    }};
1 0
原创粉丝点击