二叉树的深度优先遍历
!!版权声明:本文为博主原创文章,版权归原文作者和博客园共有,谢绝任何形式的 转载!!
作者: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
作者: mohist
出处:https://www.cnblogs.com/pandamohist/p/10582420.html
版权:本站使用「CC BY 4.0」创作共享协议,未经作者同意,请勿转载;若经同意转载,请在文章明显位置注明作者和出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端