【剑指 offer】(二十三)—— 从上往下打印二叉树(或曰层次遍历、广度优先遍历)

从广度优先到深度优先,只差一个数据结构。

从上往下打印二叉树,实质是在考察树的遍历问题,显然不同于更为经典的先序、中序和后序遍历,而属于一种层次遍历,或曰广度优先遍历。

二叉树节点的定义如下:

struct BinaryTreeNode
{
    int val;
    BinaryTreeNode* lft;
    BinaryTreeNode* rgt;
};

使用队列(FIFO)实现广度优先

#include <deque>

void bfs(BinaryTreeNode* root)
{
    if(!root)
        return;
    deque<BinaryTreeNode*> treeNodeDeque;
    treeNodeDeque.push_back(root);
    while (!treeNodeDeque.empty())
    {
        BinaryTreeNode* node = treeNodeDeque.front();
        treeNodeDeque.pop_front();

        // .. 可对 node 指针做各种处理

        if (node->lft)
            treeNodeDeque.push_back(node->lft);
        if (node->rgt)
            treeNodeDeque.push_back(node->rgt);
    }
}

使用栈(FILO)实现深度优先

#include <stack>

void dfs(BinaryTreeNode* root)
{
    if (!root)
        return;
    stack<BinaryTreeNode*> treeNodeStack;
    treeNodeStack.push(root);

    while (!treeNodeStack.empty())
    {
        BinaryTreeNode* node = treeNodeStack.top();
        treeNodeStack.pop();

        // ... 对 node 节点做各种处理

        if (node->lft)
            treeNodeStack.push(node->lft);
        if (node->rgt)
            treeNodeStack.push(node->rgt);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值