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;
}

        当然了,还有其他方法了,赶着去吃饭,就先这样上交着,回来再想。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值