第十六题 前面之字形的简单版本 利用队列的层序遍历
/*
struct TreeNode {int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
vector<int> PrintFromTopToBottom(TreeNode* root) {
// 之前我用到过 层序遍历 之字形那题 直接拿了来修改
// 层序遍历 按层 存入返回的结果
vector<int> ans;
// 边界问题
if(root == NULL)
return ans;
// 用于层次遍历 保存后续结点的队列
queue<TreeNode *> p;
// 第一次先把根节点放进去
p.push(root);
// 层次遍历 如果队列不是空,则继续往下遍历
while( !p.empty() ){
// 相比之字形 每层都需要其他处理 要计算每一层有多少个结点 这里不需要
// 弹出队列首个结点
TreeNode* thisnode = p.front();
p.pop();
// 将该结点的值 保存到ans中
ans.push_back(thisnode->val);
// 将该结点的左右结点保存到队列 让他后面可以继续向下面的层访问
if(thisnode->left!=NULL)
p.push(thisnode->left);
if(thisnode->right!=NULL)
p.push(thisnode->right);
}
return ans;
}
};