考察知识点: 先序遍历、深度优先搜索
题目分析:
可以通过先序遍历
的方式,每下降一个节点,deepth
加1。将满足题意的节点放入vector
中。满足题意的节点可能是一个树的左子树,也可能是右子树,那怎样判断这个节点该不该加入到vector
中呢?
我们先跟着进行一次先序遍历,首先左侧的节点都满足题意,我们发现此时deepth
和vector
的size
是相同的,可以利用这一点,当size <= deepth
时将节点加入。也就是说,vector
中的一个下标被先占用了的话,其他节点就不能再占用这个下标,这样就能找到结果。
所用编程语言: C++
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return int整型vector */ void traverse(TreeNode *root, vector<int> &res, int deepth) { if (!root) return; int size = res.size(); if (size <= deepth) res.push_back(root->val); traverse(root->left, res, deepth + 1); traverse(root->right, res, deepth + 1); } vector<int> leftSideView(TreeNode* root) { // write code here if (!root) return {}; vector<int> res; traverse(root, res, 0); return res; } };