https://leetcode.com/problems/binary-tree-right-side-view/description/
BFS还是比较直观的
struct Node {
TreeNode *r;
int d;
Node(TreeNode *r, int d): r(r), d(d) {}
};
const int SZ = 2001;
int rightv[SZ];
class Solution {
public:
vector<int> rightSideView(TreeNode* root) {
vector <int> ret;
if (!root) return ret;
int dep = 0;
queue < Node > q;
q.push( Node(root, 0) );
while (!q.empty()) {
Node tp = q.front();
rightv[tp.d] = tp.r->val;
dep = max(dep, tp.d);
if (tp.r->left != NULL) {
q.push( Node(tp.r->left, tp.d + 1) );
}
if (tp.r->right != NULL) {
q.push( Node(tp.r->right, tp.d + 1) );
}
q.pop();
}
for (int i = 0; i <= dep; i++) {
ret.push_back(rightv[i]);
}
return ret;
}
};
也可以dfs,实际dfs更合题意
https://leetcode.com/problems/binary-tree-right-side-view/discuss/56203/Simple-C++-solution-(BTW:-I-like-clean-codes)
class Solution {
public:
void dfs(vector<int> & ans, TreeNode* root, int d) {
if (d >= ans.size()) ans.push_back( root->val );
if (root->right) dfs(ans, root->right, d+1);
if (root->left) dfs(ans, root->left, d+1);
}
vector<int> rightSideView(TreeNode* root) {
vector<int> ret;
if (!root) return ret;
dfs(ret, root, 0);
return ret;
}
};