二叉树的深度优先遍历

!!版权声明:本文为博主原创文章,版权归原文作者和博客园共有,谢绝任何形式的 转载!!

作者:mohist

 

--- 欢迎指正---

今天继续树的遍历。 这里要说的是 二叉树的 深度优先遍历。

深度优先遍历:从根结点开始,先遍历根的左子树,再遍历根右子树。以此类推输出结果。如下图:

深度优先结果: 5 、3、1、4、7、9

分析:

  1、先将5入栈, 此时栈中只有5一个元素。 

  2、将占栈中的5弹栈,在将其右孩子7压栈,此时栈中只有7一个元素。

  3、再将右孩子3入栈,此时栈中栈顶到栈底的顺序是:3、7。

  4、此时在弹栈, 重复2、3步骤,直到遍历结束

 

结点的结构:

复制代码
struct node 
{
    // 数据域
    int data;

    // 左节点
    node *lc;

    // 右结点
    node *rc;

    // 构造函数
    node()
        : data(0)
        , lc(NULL)
        , rc(NULL)
    {
    }
};
复制代码

 

深度优先遍历函数:

复制代码
// 3-23-2019 07:11 新增深度优先遍历
    void dfs()
    {
        cout <<  endl << endl << "深度优先遍历" << endl;

        stack<node*> vs;

        // 思路: 先将根结点入栈,再将其右孩子入栈,再将其左孩子入栈。一次遍历输出
        if (NULL != root)
            vs.push(root);
        

        node *tmp_node = NULL;
        while (false == vs.empty())
        {
            tmp_node = vs.top();
            cout << tmp_node->data << " -> ";

            // 弹出已经输出的元素
            vs.pop();

            // 将其右孩子入栈
            if (NULL != tmp_node->rc)
                vs.push(tmp_node->rc);
            
            // 再将其左孩子入栈
            if (NULL != tmp_node->lc)
                vs.push(tmp_node->lc);
        }
    }
复制代码

 

 

测试结果:

 

GitHub 地址: https://github.com/mohistH/base_data_structure

 

posted @   mohist  阅读(2327)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示