[LeetCode] Binary Tree Level Order Traversal II 二叉樹層序遍歷之二
阿新 • • 發佈:2018-12-27
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,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its bottom-up level order traversal as:
[ [15,7], [9,20], [3] ]
解法一:
// Iterative 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.insert(res.begin(), oneLevel); } return res; } };
下面我們來看遞迴的解法,核心就在於我們需要一個二維陣列,和一個變數level,當level遞迴到上一層的個數,我們新建一個空層,繼續往裡面加數字,參見程式碼如下:
解法二:
// Recurive 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); } };
類似題目: