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

来源:互联网 发布:新菜鸟网络俱乐部 编辑:程序博客网 时间:2024/06/05 13:22

题目内容

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).

0 0
原创粉丝点击