[LeetCode 107]Binary Tree Level Order Traversal II(递归法)

题目内容

107 Binary Tree Level Order Traversal II
Given a binary tree, return the bottom-up level order traversal of its nodes’ values. (ie, from left to right, level by level from leaf to root).
For example:
Given binary tree [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
return its bottom-up level order traversal as:
[
[15,7],
[9,20],
[3]
]
问题来源

问题简述

按层遍历二叉树,并按自底向上,从左至右的顺序记录每层的数值。

题目分析

递归法是解决这一问题较为直接的方法,即对二叉树进行深度优先遍历。其中,引入表示层数的递归变量level能够利用vector中的下标操作较为快捷地插入元素。level变量的初始值设为0,每次向下遍历时加一。
每次递归时,如果结果中不存在对应层数的子容器,则新建一个容器。然后与层数对应的子容器中插入相应值即可,然后对其子节点进行level递增1的递归调用即可。
递归完成后,所得容器经过外层反转后即可得到题目所需结果。

代码示例

class Solution {
public:
   vector<vector<int>> res;
   void  DFS(TreeNode* p,int level)
    {
        vector<int> temp;
        if(p==NULL)
        return ;
        if(level==res.size())
            res.push_back(vector<int>());
        res[level].push_back(p->val);
        DFS(p->left,level+1);
        DFS(p->right,level+1);
    }
    vector<vector<int>> levelOrderBottom(TreeNode* root) {  
        DFS(root,0);
        vector<vector<int>> result;
        for(int i=res.size()-1;i>=0;i--)
            result.push_back(res[i]);
        return result;
    }
};

时间复杂度O(n),空间复杂度O(n).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值