题解 | #求二叉树的层序遍历#
求二叉树的层序遍历
http://www.nowcoder.com/practice/04a5560e43e24e9db4595865dc9c63a3
1、题目描述
给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)。
例如:给定的二叉树是{3,9,20,#,#,15,7},
3
/ \
9 20
/ \
15 7该二叉树层序遍历的结果是
[[3],[9,20],[15,7]]
层次遍历,通过队列来实现,整体思路就是先把根节点入队,然后出队,队为空就入前面出队的元素的左、右子树,不为空就继续出队头元素。
需要注意的是,题目给的返回值是二维类型,所以要额外定义一个辅助容器(一维类型)qvec,这个容器记录每层从左到右的元素,当该容器有元素的时候,就把他的内容输给res。
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型vector<vector<>>
*/
vector<vector<int> > levelOrder(TreeNode* root) {
// write code here
queue<TreeNode*> Queue;//利用队列实现
vector<vector<int>> res;
if(!root)
{
return res;
}
Queue.push(root);
while(Queue.size()>0)
{
vector<int> qvec;
int size = Queue.size();
while(size>0)
{
TreeNode* node = Queue.front();
qvec.push_back(node->val);
Queue.pop();
size--;
if(node->left)
Queue.push(node->left);
if(node->right)
Queue.push(node->right);
}
if(qvec.size()>0)
{
res.push_back(qvec);
}
}
return res;
}
};2、题目描述
给定一个二叉树,返回该二叉树由底层到顶层的层序遍历,(从左向右,从叶子节点到根节点,一层一层的遍历)。
例如:给定的二叉树是{3,9,20,#,#,15,7},
3
/ \
9 20
/ \
15 7该二叉树由底层到顶层层序遍历的结果是
[[15,7],[9,20],[3]]
我的思路是采用一个队列和一个栈来实现。队列用来将树按照正常层序遍历的顺序存放,栈用来将输出顺序反转。
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型vector<vector<>>
*/
vector<vector<int> > levelOrderBottom(TreeNode* root) {
// write code here
vector<vector<int>> res;
queue<TreeNode*> Queue; //注意队列中数据存放类型
Queue.push(root);
stack<vector<int>> Stack;//注意栈中的数据存放类型
if(!root)
return res;
while(Queue.size()>0)
{
vector<int> qvec;
int size = Queue.size();
while(size>0)
{
TreeNode* node = Queue.front();
qvec.push_back(node->val);
Queue.pop();
size--;
if(node->left)
Queue.push(node->left);
if(node->right)
Queue.push(node->right);
}
if(qvec.size()>0)
{
Stack.push(qvec);//将每层从左到右的节点存到的容器入栈
}
}
while(Stack.size()>0)
{
vector<int> rvec = Stack.top();
Stack.pop();
res.push_back(rvec);
}
return res;
}
};牛客刷题记录 文章被收录于专栏
记录自己的刷题记录,刷过的题的解法
阿里云工作强度 667人发布