給定一棵二叉樹,想象本身站在它的右側,按照從頂部到底部的順序,返回從右側所能看到的節點值。node
示例:ide
輸入: [1,2,3,null,5,null,4]
輸出: [1, 3, 4]
解釋:code
1 <---
/ \
2 3 <---
\ \
5 4 <---it
解題思路:層次遍歷樹中的每個結點,同時result只記錄每一層中的一個結點,若是不是最右邊的結點更新便可.,
代碼實現io
/** * Definition for a binary tree node. * 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> result; if(root == NULL) return result; queue<pair<TreeNode*,int> > Queue; Queue.push(make_pair(root,0)); while(!Queue.empty()) { TreeNode* node = Queue.front().first; int step = Queue.front().second; Queue.pop(); if(step == result.size()) result.push_back(node->val); else result[step] = node->val; if(node->left) { Queue.push(make_pair(node->left,step + 1)); } if(node->right) { Queue.push(make_pair(node->right, step + 1)); } } return result; } };