剑指offer(二十二)——从上往下打印二叉树,层次遍历

题目描述:

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

问题分析:

对于二叉树

 

 其层次遍历打印序列为:字母下面表示层数

 

 

我们可以发现  第i个节点的左右子树在第2*i和第2*1+1的位置。

第一层: 节点A   

第二层:节点A的左右

第三层: 节点A的左的左右   节点A的右的左右

第四层: 节点A的左的左的左右

打印流程可以用一个队列表示,每打印一个节点入队该节点的左右孩子。

 

 

 

 

 

 

附上代码:注意上的访问队首元素,在本题中是插入到输出数组中。


/*
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> list;
        queue<TreeNode*> que;
        if(root == nullptr) {    
            return list;
        }
        //1。入首节点
        que.push(root);
        while(!que.empty()) {
            list.push_back(que.front()->val);
            if(que.front()->left != nullptr) que.push(que.front()->left);
            if(que.front()->right != nullptr) que.push(que.front()->right);    
            que.pop();
        }
        return list;
    }
};

 

 

 

 

 

posted @ 2019-10-29 11:00  碎梦残阳  阅读(69)  评论(0)    收藏  举报