leetcode 虐我篇之(十八)Binary Tree Level Order Traversal II

        做完Binary Tree Level Order Traversal這道題,再來做現在這道題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]
]
confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.

        有了前一道題的解題思路和程序,做這道題,簡直就是信手拈來,直接將最後的結果翻轉後返回就ok了。代碼如下:

std::vector<std::vector<int> > levelOrderBottom(TreeNode *root)
{
	std::vector<std::vector<int> > result,resultReverse;
	std::vector<int> temp;
	std::queue<TreeNode *> treeQueue1,treeQueue2;

	if (!root)
	{	
		return result;
	}

	treeQueue1.push(root);

	TreeNode *node = NULL;

	while(!treeQueue1.empty() || !treeQueue2.empty())
	{
		if (!treeQueue1.empty())
		{
			node = treeQueue1.front();
			treeQueue1.pop();
			if (node->left)
			{
				treeQueue2.push(node->left);
			}
			if (node->right)
			{
				treeQueue2.push(node->right);
			}

			temp.push_back(node->val);

		}

		if (treeQueue1.empty())
		{
			//this means that this level is over
			result.push_back(temp);
			temp.clear();
			treeQueue1.swap(treeQueue2);	//swap two queue
		}	

	}

	resultReverse.insert(resultReverse.begin(),result.rbegin(),result.rend());

	return resultReverse;
}

        當然了,還有其他方法了,趕着去吃飯,就先這樣上交着,回來再想。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章