题解 | #求二叉树的层序遍历#

求二叉树的层序遍历

http://www.nowcoder.com/practice/04a5560e43e24e9db4595865dc9c63a3

解题思路:

二叉树的层序遍历是一道基础的题目,可以使用BFS和DFS两种思路来解决,其中BFS在此题中相对更为简洁。
BFS

DFS

方法一:使用BFS遍历

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > levelOrder(TreeNode* root) {
        // write code here
        vector<vector<int>> ans;
        if(root==nullptr)    
            return ans;
        queue<TreeNode*> q;
        q.push(root);
        while(!q.empty()){
             //sz记住当前层的节点数量,方便确定执行该层的遍历次数。
            int sz=q.size();
            vector<int> cur;
            while(sz--){
                TreeNode* tmp=q.front();
                q.pop();
                cur.push_back(tmp->val);
                if(tmp->left)
                    q.push(tmp->left);
                if(tmp->right)
                    q.push(tmp->right);
            }
            ans.push_back(cur);
        }
        return ans;
    }
};

复杂度分析

时间复杂度:O(n),n为节点数量,BFS对每个节点访问一次。
空间复杂度:O(n),空间复杂度在于队列中存储节点的最大值,当该二叉树为满二叉树时,最大数量为(n+1)/2。

方法二:使用DFS遍历

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > levelOrder(TreeNode* root) {
        // write code here
        vector<vector<int>> ans;
        dfs(ans,root,0);
        return ans;
    }
    void dfs(vector<vector<int>>& ans,TreeNode* root,int level){
        if(root==nullptr) return;
        //当前层数超过了ans的大小,需要新增一个vector<int>
        if(level>=ans.size())
            ans.push_back(vector<int>());
        ans[level].push_back(root->val);
        dfs(ans,root->left,level+1);
        dfs(ans,root->right,level+1);
    }
};

复杂度分析

时间复杂度:O(n),n为节点数量,DFS对每个节点访问一次,因此递归调用n次,每次调用执行常数次操作,时间复杂度O(n)。
空间复杂度:O(n),空间复杂度在于递归调用深度和每次递归调用辅助空间,辅助空间为常数级,与节点深度相关,当节点深度为n时最大,为O(n)。

全部评论

相关推荐

02-01 12:05
复旦大学 Java
腾讯的提前批大概率应该是没有笔试的,但是这个时候有相当部分的同学简历估计都没有准备好,没准备好的同学也不用急,大部分都是3月之后开,这个时候开的绝大多数都是神仙打架,问的东西也比较难,打算投递的同学也多看下计算机网络和操作系统,腾讯对这部分的知识问的比较多。另外多刷下牛客的热门题库,刷题注意刷ACM模式,和牛客的周赛题,腾讯有的部门会从这里面出原题。我是@程序员花海关注我,带你了解更多校招资讯!
程序员花海:还没有来得及准备的同学可以看下学习路线:https://www.nowcoder.com/discuss/824693499982315520?sourceSSR=users算法题:https://www.nowcoder.com/feed/main/detail/20e7a999fa04485b88340a274411ca0d?sourceSSR=users八股文:https://www.nowcoder.com/discuss/833102362771251200?sourceSSR=users简历书写方式:https://www.nowcoder.com/discuss/839907820706205696?sourceSSR=users都是以前在牛客发的文章~
软开人,秋招你打算投哪些...
点赞 评论 收藏
分享
评论
2
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务