二叉树 深度优先遍历 详解
来源:互联网 发布:守望先锋max录入数据 编辑:程序博客网 时间:2024/06/08 14:53
参考自:
http://www.cnblogs.com/lscheng/archive/2013/09/11/3313947.html
http://blog.csdn.net/zhonghua18517/article/details/28238261
1、二叉树深度优先遍历是什么样的遍历(输出)顺序
通俗讲就是两点原则:
1)先从根节点“靠左边”一直往最深的节点遍历;
2)再一层一层的上来把剩余节点以原则1)遍历(输出)。
比如这棵二叉树↓(图出处见水印)
根据二叉树深度优先遍历的规则,遍历的顺序就是:1 2 3 4 5 6 7 9 8
2、为了这个顺序,代码实现
用到栈先进后出的特性,代码↓:
void main(Tree* root){Stack<Tree*> nodeStack;nodeStack.push(root);while(!nodeStack.empty()){root=nodeStack.top();printf(format, root->data);nodeStack.pop();if(root->rChild){nodeStack.push(root->rChild);}if(root->lChild){nodeStack.push(root->lChild);}}}
3、代码一步步跑一遍
以这棵二叉树为例↓
初始化代码↓
Stack<Tree*> nodeStack;nodeStack.push(root);建立了一个栈,运行完后,栈的内容↓
-------------------
1(栈顶)
-------------------
第1次循环
while(!nodeStack.empty()){root=nodeStack.top();printf(format, root->data);nodeStack.pop();if(root->rChild){nodeStack.push(root->rChild);}if(root->lChild){nodeStack.push(root->lChild);}}
运行后栈的内容,及打印出的内容↓
-------------------
2(栈顶)
6(栈底)
-------------------
打印:1
第2次循环
代码相同,不再粘了。运行后栈的内容,及打印出的内容↓-------------------
3(栈顶)
5
6(栈底)
-------------------
打印:1 2
第3次循环
运行后栈的内容,及打印出的内容↓-------------------
4(栈顶)
5
6(栈底)
-------------------
打印:1 2 3
第4次循环
运行后栈的内容,及打印出的内容↓-------------------
5(栈顶)
6(栈底)
-------------------
打印:1 2 3 4
第5次循环
运行后栈的内容,及打印出的内容↓-------------------
6(栈顶)
-------------------
打印:1 2 3 4 5
第6次循环
运行后栈的内容,及打印出的内容↓-------------------
7(栈顶)
-------------------
打印:1 2 3 4 5 6
第7次循环
运行后栈的内容,及打印出的内容↓-------------------
9(栈顶)
8(栈底)
-------------------
打印:1 2 3 4 5 6 7
第8次循环
运行后栈的内容,及打印出的内容↓-------------------
空(栈顶)
-------------------
打印:1 2 3 4 5 6 7 9 8
第9次进循环
循环结束,程序结束,最终遍历结果:1 2 3 4 5 6 7 9 8
2 1
- 二叉树 深度优先遍历 详解
- 深度优先遍历二叉树
- 二叉树深度优先遍历
- 二叉树深度优先遍历
- 二叉树的深度优先遍历和深度优先遍历
- 二叉树广度优先遍历+二叉树深度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历与广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的广度优先遍历和深度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历以及广度优先遍历
- 极速多渠道打包
- 归并排序详解
- listView自动滑动功能
- webconfig添加 节点的技巧 MIME映射
- Android性能调优具体技巧 20+条(干货不止一点点)
- 二叉树 深度优先遍历 详解
- 泛型算法11
- C++第一次实验Plus
- colinux的安装
- androidUSB通信——打印机
- JAVA排序算法---快速排序
- 深入理解学习Git工作流
- Android Studio系列-签名打包
- C++第1次实验\1