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

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

被折叠的 条评论
为什么被折叠?



