您的位置:首页 > 其它

[Leetcode 199, Medium] Binary Tree Right Side View

2015-05-04 10:47 399 查看
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]
.
Analysis:

Solutions:

C++:

vector<int> rightSideView(TreeNode *root) {
        vector<int> result;

        if(!root)
            return result;

        vector<TreeNode *> visible_pointer_array;
        stack<TreeNode *> cached_nodes;
        TreeNode *pCurrNode = root;
        int index = 0;
        while(pCurrNode || !cached_nodes.empty()) {
            if(pCurrNode) {
                if(index == visible_pointer_array.size())
                    visible_pointer_array.push_back(pCurrNode);
                else if(index < visible_pointer_array.size())
                    visible_pointer_array[index] = pCurrNode;
                ++index;
                cached_nodes.push(pCurrNode);
            }
            
            if(pCurrNode && pCurrNode->left)
                pCurrNode = pCurrNode->left;
            else {
                pCurrNode = cached_nodes.top();
                cached_nodes.pop();
                int i = visible_pointer_array.size() - 1;
                for(; i >= 0  ; --i) {
                    if(pCurrNode == visible_pointer_array[i])
                        break;
                }
                index = i + 1;
                pCurrNode = pCurrNode->right;
            }
        }
        
        for(int i = 0; i < visible_pointer_array.size(); ++i)
            result.push_back(visible_pointer_array[i]->val);

        return result;
    }
Java:

Python:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: