<剑指offer> 从上往下打印二叉树

来源:互联网 发布:软件开发英语不会 编辑:程序博客网 时间:2024/06/06 01:08

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

思路:相当于bfs(图中广度优先遍历)

借助队列实现(初始化一个队列)

/*
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) {
    queue<TreeNode*> q;                           //初始化一辅助用的队列
    vector<int> v;                                         //存储每个结点的值
    q.push(root);                                          //将队列入队列
    while(!q.empty())                                    //若当前队列不为空
    {
        TreeNode* r = q.front();                     //获取队列的首元素并弹出
        q.pop();
        if(!r)                                                  //若该元素不存在,下面的程序就不运行,继续下一次循环
          continue;                                        //该判断语句作用:当q.push(r->left)  or q.push(r->right),左子树或右子树为空时  ,入队列为空指针

                                                                //也可以在循环之前和进入队列之前判断是否为空指针(3次判断)  
        v.push_back(r->val);
        q.push(r->left);
        q.push(r->right);
    }
        return v;
    }
};

0 0