[LeetCode]102. Binary Tree Level Order Traversal 二叉树层序遍历

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

For example:
Given binary tree [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

return its level order traversal as:

[
  [3],
  [9,20],
  [15,7]
]

递归或广度优先搜索BFS

解法1:递归

void levelOrder(vector> &ans, int l,TreeNode* root) {
    if(ans.size()<=l){
        vector t;ans.push_back(t);//新的一层
    }
    ans[l].push_back(root->val);
    if(root->left) levelOrder(ans,l+1,root->left);
    if(root->right) levelOrder(ans, l+1, root->right);
}

vector> levelOrder(TreeNode* root) {
    vector> ans;
    if(root==NULL) return ans;
    levelOrder(ans,0,root);
    return ans;
}

解法2:广度优先搜索BFS

和直接的BFS不同的是,需要把每一层分开

vector> levelOrder2(TreeNode* root) {
    vector> ans;
    if(root==NULL) return ans;
    queue tv{{root}};
    TreeNode *t;
    while(!tv.empty()){
        vector tl;
        for (int i = tv.size(); i > 0; --i) {
            t = tv.front();tv.pop();
            tl.push_back(t->val);
            if (t->left) tv.push(t->left);
            if (t->right) tv.push(t->right);
        }
        ans.push_back(tl);
    }
    return ans;
}

 

你可能感兴趣的:(oj)