二叉树的层序遍历主要用的是队列,思路很简单。
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
if(root==NULL) return vector<vector<int>>();
vector<vector<int>> res;
queue<TreeNode*> Q;
Q.push(root);
while(!Q.empty())
{
int sz =Q.size();
res.push_back(vector<int>());
for(int i=0;i<sz;i++)
{
TreeNode* cur=Q.front();Q.pop();
res.back().push_back(cur->val);
if(cur->left!=NULL)
{
Q.push(cur->left);
}
if(cur->right!=NULL)
{
Q.push(cur->right);
}
}
}
return res;
}
};
二叉树的深度优先遍历;
深度优先遍历用的主要是递归;
代码如下:
class Solution {
public:
vector<int>path;
vector<vector<int>> ans;
void dfs(TreeNode* root,int targetSum)
{
if(root==nullptr) return;//递归结束条件
targetSum-=root->val;
path.push_back(root->val);
if(root->left==nullptr&&root->right==nullptr&&targetSum==0)
{
ans.push_back(path);//当到达叶子结点的时候,如果路径之和正好等于targetsum,则将路径加入数组
}
if(root->left) dfs(root->left,targetSum);//遍历左子树
if(root->right) dfs(root->right,targetSum);//遍历右子树
path.pop_back();
}
vector<vector<int>> pathSum(TreeNode* root, int targetSum) {
dfs(root,targetSum);
return ans;
}
};