leetcode7:Binary Tree Level Order Traversal II

Binary Tree Level Order Traversal II 

题目连接:https://oj.leetcode.com/problems/binary-tree-level-order-traversal-ii/
runtimes:9ms

一、问题

     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},
      
      return its bottom-up level order traversal as:
        

二、分析

        1、最直接的想法是层次遍历,并用另外一个队列记录每一个点的层数,按照层数放进相应的vector。最后再把结果逆反。
        2、脑袋一抽又想到了另外一种不用逆反的方法,就是先按照层次遍历将节点放入队列,但是要先放右子树再放左子树,然后从队列尾部取出元素处理,方法相对应层次的vector里面,酱紫就不用逆反了。

三、小结

        实现了第一种方案,但是其中要注意的是1、对于树结构一定要检查树是否为空;2、无符号整型不能和有符号整型比较,比如result.size() - 1,当size为0时,减去1得到的数将会是无符号整型数的最大值。

四、实现

 #include <queue>
class Solution {
public:
    vector<vector<int> > levelOrderBottom(TreeNode *root) {
        vector <vector <int> > result;
        if(root == NULL)
            return result;
        queue <TreeNode *> treeNodeQue;
	treeNodeQue.push(root);
	queue <int> que;
	que.push(0);
	while (treeNodeQue.size() > 0)
	{
		TreeNode *tree = treeNodeQue.front(); treeNodeQue.pop();
		int counter = que.front(); que.pop();
		if (tree->left != NULL)
		{
			treeNodeQue.push(tree->left); 
			que.push(counter + 1);
		}
		if (tree->right != NULL)
		{
			treeNodeQue.push(tree->right);
			que.push(counter + 1);
		}
		int minus = result.size() - 1;
		if (counter > minus)
		{
			vector <int> re;
			re.push_back(tree->val);
			result.push_back(re);
		}
		else{
			result[counter].push_back(tree->val);
		}
	}
	for (int i = 0, j = result.size() - 1; i < j; i++, j--)
	{
		vector <int> temp = result[i];
		result[i] = result[j];
		result[j] = temp;
	}
	return result;
    }
};



五、三思


       自己的解法挺不错的了~攒个!用java写的代码比较简洁,不过用了递归,空间消耗较大。
       原文链接:http://blog.hfknight.com/?p=1249

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值