LeetCode Binary Tree Level Order Traversal II

本文介绍了一种解决二叉树逆序层序遍历问题的方法,通过使用队列来保存每一层的节点,并利用辅助结构记录节点所在的层级,最终实现按层输出并逆序排列。

如果说直接给这道题,没有前面那些题的铺垫,没准我会晕一阵子,有了前面的题就好办了,只是多一行代码。这题也说明了,有些题刚开始真是无从下手,或者按照题目要求的直接求很难求,比如这题,怎么才能先遍历子节点然后遍历父节点呢?这么想肯定晕,但是若能想到按照常规的遍历方法,只是结果集存在容器里,然后对容器里的元素处理就可以解出题目了。

vector<vector<int> > levelOrderBottom(TreeNode *root) {
	vector<vector<int> >ret;
	vector<int> oneresult;
	if(root==NULL)
		return ret;
	queue<QueNode> que;
	QueNode qn;
	qn.num = 0;
	qn.pTreeNode = root;
	que.push(qn);
	QueNode tempNode,tempLeftNode,tempRightNode;
	int lastnum = 0;
	while(!que.empty())
	{
		tempNode = que.front();
		que.pop();
		if (lastnum!=tempNode.num)
		{
			ret.push_back(oneresult);
			oneresult.clear();
			oneresult.push_back(tempNode.pTreeNode->val);
			lastnum = tempNode.num;
		}
		else
			oneresult.push_back(tempNode.pTreeNode->val);
		if (tempNode.pTreeNode->left)
		{
			tempLeftNode.num = tempNode.num+1;
			tempLeftNode.pTreeNode = tempNode.pTreeNode->left;
			que.push(tempLeftNode);
		}
		if (tempNode.pTreeNode->right)
		{
			tempRightNode.num = tempNode.num+1;
			tempRightNode.pTreeNode = tempNode.pTreeNode->right;
			que.push(tempRightNode);
		}	
	}
	ret.push_back(oneresult);
	oneresult.clear();
	reverse(ret.begin(),ret.end());
	return ret;
}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值