Leetcode 107. Binary Tree Level Order Traversal II

来源:互联网 发布:田丰 阿里云 领英 编辑:程序博客网 时间:2024/06/08 00:53

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]]

s思路:
1. 先来简单粗暴的做法:每层遍历出结果,然后在把结果reverse。还有一种就是:先知道tree有好多层,然后写的时候从vector右边开始写。总之,没有一次可以搞定的,不是预处理,就是后处理。
2. 之前 Leetcode 102. Binary Tree Level Order Traversal用queue来做,这道题也确实用bfs来做很直观,没难度。稍微有点难度的是用recursive的方法:recursive会先沿着一条路走到底再换路,这个过程就会在不同层次见穿梭。那么还可以用recursive吗?通用的方法就是用一个参数来表示目前到那个层次了,如果层次大于vector的最大size,说明是第一次访问这个层次,需要resize vector;如果层次小于vector的size,则直接在对应位置push_back。这种做法,确实有些趣味。你看,dfs想要把同一个层次的数放在一起,没bfs方便,因为层次变来变去,但是一旦我们给这个层次取一个名字,抓住他,一样的方便,恰好弥补了这个缺陷!!!

//方法1:recursive来个正序的,然后在reverse结果。class Solution {public:    void helper(vector<vector<int>>&res,TreeNode* root,int level){        if(!root) return;        if(level>=res.size()){            res.resize(level+1);            }           res[level].push_back(root->val);        helper(res,root->left,level+1);        helper(res,root->right,level+1);            }    vector<vector<int>> levelOrderBottom(TreeNode* root) {        //        vector<vector<int>> res;        helper(res,root,0);         return vector<vector<int>>(res.rbegin(),res.rend());                }};
0 0
原创粉丝点击