0
点赞
收藏
分享

微信扫一扫

二叉树的广度优先遍历(BFS)例题——二叉树打印

逸省 2022-02-05 阅读 62

题目描述

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

算法思路

是一个典型的二叉树广度优先遍历的例子。广度优先经常利用队列的先进先出实现的。
特例处理:当树的根结点为空时,直接返回空列表。
建立一个队列,用于遍历每个父节点。遍历了这个父节点的左节点和右节点之后出队列。

class Solution {
public:
    vector<int> levelOrder(TreeNode* root) {
        queue<TreeNode*> Q,temp;
        vector<int> res;
        if(!root)
        {
            return {};
        }
        Q.push(root);
        while(!Q.empty())
        {
            
            res.push_back(Q.front()->val);
            if(Q.front()->left)
            {
                Q.push(Q.front()->left);
            }
            if(Q.front()->right)
            {
                Q.push(Q.front()->right);
            }
            Q.pop();
        }
        return res;
    }
};

另一扩展题目:

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

描述:

算法思路

与上面不同的是每一层要分开打印。只需要设立for循环将队列的长度设为循环次数就可

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        if(!root)
        {
            return{};
        }
        int i=0;
        vector<vector<int>> res;
        Q.push(root);
        while(!Q.empty())
        {
            vector<int> temp;
            for(i=Q.size();i>0;i--)
            {
                auto top=Q.front();
                Q.pop();
                temp.push_back(top->val);
                if(top->left)
                    Q.push(top->left);
                if(top->right)
                    Q.push(top->right);
            }
            res.push_back(temp);
        }
        return res;
    }
private: 
    queue<TreeNode*> Q;
};

举报

相关推荐

0 条评论