1. 程式人生 > >Binary Tree Level Order Traversal II(LeetCode)

Binary Tree Level Order Traversal II(LeetCode)

題目來源:leetcode 原題地址:https://leetcode.com/problems/binary-tree-level-order-traversal-ii/ 題目:

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函式每次是將新元素新增至末尾,所以還需要進行一次對調工作。