《从头再来》剑指offer.32I 从上到下打印二叉树

从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。

涉及到二叉树的打印问题,其实用到递归就好了。但是,递归只能解决前序遍历、中序遍历、后序遍历的打印,不能解决层序遍历的打印。所以从上往下打印二叉树层序遍历的情况下,我们需要借助一个队列来帮助我们解决问题。

队列存在的目的就是保留我们层序遍历到的节点,为层序遍历做一个记录。当一个节点出队列时,需要在队列的末尾入队该节点的左右子树(当然需要满足左右子树不为空才能入队),循环的将队列的头元素的值压入result数组中,直到队列中没有元素。(在循环前一定要先将根结点压入队列,否则循环还没开始就结束了!)

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<int> levelOrder(TreeNode* root) {
        vector<int> result;
        if(root == nullptr) return result;

        //借助队列来存储每一层的节点,节点出队,则将它的左右子树加入队列
        queue<TreeNode*>    que;
        //首先将根结点入队
        que.push(root);
        while(!que.empty()){
            TreeNode* tmpnode = que.front();//取得队列的头元素
            //将头元素的值加入result数组
            result.push_back(tmpnode->val);
            //头元素出队
            que.pop();
            //在队尾加入头节点的左右子树
            if(tmpnode->left != nullptr)    que.push(tmpnode->left);
            if(tmpnode->right != nullptr)   que.push(tmpnode->right);
        }
        return result;
    }
};

《从头再来》

posted @ 2021-06-06 21:37  丶原来是枝知啊i  阅读(57)  评论(0)    收藏  举报