107. Binary Tree Level Order Traversal II

来源:互联网 发布:淘宝画师招聘 编辑:程序博客网 时间:2024/06/05 00:21

Given a binary tree, return the bottom-up level order traversal of its nodes’ values. (i.e, 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]]

题意:

给定一个二叉树,返回由底到顶层次遍历的结果。结果要求为一个二维数组,每层的结果保存在一个一维数组中。

思路:

和102. Binary Tree Level Order Traversal的思路一样,区别只在于最后利用STL的变序算法reverse(),颠倒res的前后顺序。

8ms

class Solution {public:    vector<vector<int> > levelOrderBottom(TreeNode *root) {        vector<vector<int> > res;        if (root == NULL) return res;        queue<TreeNode*> q;        q.push(root);        while (!q.empty()) {            vector<int> oneLevel;            int size = q.size();            for (int i = 0; i < size; ++i) {                TreeNode *node = q.front();                q.pop();                oneLevel.push_back(node->val);                if (node->left) q.push(node->left);                if (node->right) q.push(node->right);            }            res.push_back(oneLevel);        }        reverse(res.begin(),res.end());        return res;    }};

和102. Binary Tree Level Order Traversal一样,这道题也可以用递归来求解:

8ms

class Solution {public:    vector<vector<int>> levelOrderBottom(TreeNode* root) {        vector<vector<int> > res;        levelorder(root, 0, res);        return vector<vector<int> > (res.rbegin(), res.rend());    }    void levelorder(TreeNode *root, int level, vector<vector<int> > &res) {        if (!root) return;        if (res.size() == level) res.push_back({});        res[level].push_back(root->val);        if (root->left) levelorder(root->left, level + 1, res);        if (root->right) levelorder(root->right, level + 1, res);    }};
0 0
原创粉丝点击