[leetcode] 199. Binary Tree Right Side View

来源:互联网 发布:淘宝买的csgo不能交易 编辑:程序博客网 时间:2024/05/17 03:03

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

这道题是从右侧查看二叉树,获取最右侧的节点,题目难度为Medium。

最简单的想法是采用广度优先的方法按层次序遍历二叉树,把每层最后一个节点存下来就可以了,具体代码:

class Solution {public:    vector<int> rightSideView(TreeNode* root) {        vector<int> ret;        if(!root) return ret;        queue<TreeNode*> level;        level.push(root);        while(!level.empty()) {            int sz = level.size();            for(int i=0; i<sz; i++) {                TreeNode* node = level.front();                level.pop();                if(i == sz-1) ret.push_back(node->val);                if(node->left) level.push(node->left);                if(node->right) level.push(node->right);            }        }        return ret;    }};
还可以采用深度优先的策略,这里要优先遍历每个节点的右子树,记录下当前遍历的层数以便查看当前节点是否是该层第一个遍历到的节点。其实题目改成从左侧看就会变得很容易理解,思维定式罢了。具体代码:
class Solution {    void rView(TreeNode* node, int level, vector<int>& ret) {        if(!node) return;        if(level == ret.size())            ret.push_back(node->val);        rView(node->right, level+1, ret);        rView(node->left, level+1, ret);    }public:    vector<int> rightSideView(TreeNode* root) {        vector<int> ret;        rView(root, 0, ret);        return ret;    }};

0 0
原创粉丝点击