107. Binary Tree Level Order Traversal II

    xiaoxiao2025-06-12  13

    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); } };
    转载请注明原文地址: https://ju.6miu.com/read-1299864.html
    最新回复(0)