Binary Tree Level Order Traversal II(LeetCode)
阿新 • • 發佈:2019-01-07
題目來源:leetcode
原題地址:https://leetcode.com/problems/binary-tree-level-order-traversal-ii/
題目:
難度級別: easy(容易) 思路分析: 此題較為簡單,採用佇列的資料結構就可以很輕鬆的解決此題。 相對於層序遍歷,這裡要求對每一層的個數做一下記錄就可以了。 然後一層一層遍歷就可以完成此題。 實現程式碼:
程式碼說明: 在實現程式碼中,採用STL模板中的佇列來進行輔助計算,每一層迴圈都先讀取佇列長度,作為記憶體迴圈的次數,此即每層的個數。 需要注意的是,題目中要求結果為從上到下的順序排序,而vector模板的push_back函式每次是將新元素新增至末尾,所以還需要進行一次對調工作。
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] ]
難度級別: easy(容易) 思路分析: 此題較為簡單,採用佇列的資料結構就可以很輕鬆的解決此題。 相對於層序遍歷,這裡要求對每一層的個數做一下記錄就可以了。 然後一層一層遍歷就可以完成此題。 實現程式碼:
#include <iostream> #include <vector> #include <queue> using namespace std; class Solution { public: vector<vector<int> > levelOrderBottom(TreeNode* root) { vector<vector<int> > matrix; vector<int> temp; if (root == NULL) { return matrix; } queue<TreeNode *> tque; tque.push(root); //temp.push_back(root->val); //matrix.push_back(temp); TreeNode *p = NULL; while (!tque.empty()) { int levelSize = tque.size(); temp.clear(); for (int i = 0; i < levelSize; i++) { p = tque.front(); tque.pop(); if (p->left != NULL) { tque.push(p->left); } if (p->right != NULL) { tque.push(p->right); } temp.push_back(p->val); } matrix.push_back(temp); } int start = 0, end = matrix.size()-1; while (start < end) { temp = matrix[start]; matrix[start] = matrix[end]; matrix[end] = temp; start++; end--; } return matrix; } };
程式碼說明: 在實現程式碼中,採用STL模板中的佇列來進行輔助計算,每一層迴圈都先讀取佇列長度,作為記憶體迴圈的次數,此即每層的個數。 需要注意的是,題目中要求結果為從上到下的順序排序,而vector模板的push_back函式每次是將新元素新增至末尾,所以還需要進行一次對調工作。