[BFS]107. Binary Tree Level Order Traversal II

来源:互联网 发布:魔方软件是什么 编辑:程序博客网 时间:2024/06/08 05:44
题目:

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

题目分析:

1、容易看到题目要求根据给出的二叉树倒叙输出每层元素。

2、和之前完成的题目类似,这道题目也需要在BFS基础上准确判断出搜索进行到哪一层了,具体方法为设置参数th和ne来分别统计本层元素个数和下层元素个数(具体方法不作累述,详细见199)。

3、这道题的不同之处在于需要保存每层元素并倒叙输出。本题中采用的解决方法为每层循环时设置一个vector<int>保存每层元素,并压入一个临时的vector<vector<int>>中,待最后保存完所有层后在从尾到头将临时vector<vector<int>>中的元素压入答案vector<vector<int>>中实现倒叙。


代码:

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */#include<queue> class Solution {public:    vector<vector<int>> levelOrderBottom(TreeNode* root) {        vector<vector<int>> res;        vector<vector<int>> _res;                queue<TreeNode*> Q;        Q.push(root);        int th = 1;        int ne = 0;                if(root == NULL){        return res;        }                while(!Q.empty()){        vector<int> put;        for(int i = 0; i< th; i++){        TreeNode* node = Q.front();        put.push_back(node.value);        if(node->left != NULL){        Q.push(node->left);        ne++;        }        if(node->right != NULL){        Q.push(node->right);        ne++;        }        Q.pop();        }        _res.push_back(put);        th = ne;        ne = 0;        }                for(int i = 0; i < _res.size(); i++){        res.push_back(_res[_res.size() - 1 - i]);        }                return res;    }};

总结:

这道题目的一个难点在于如何实现倒叙,倒不是具体用两个vector实现很复杂,只是可能会容易出现始终纠结于如何倒叙BFS的问题上,从而耽搁了不必要的时间。

0 0
原创粉丝点击