树的深度优先遍历和广度优先遍历非递归实现.
2015-12-17 19:28
155 查看
注:树的深度优先遍历就是二叉树的先序遍历.
下面是我用java实现的代码.
下面是我用java实现的代码.
package com.datastruct; import java.util.LinkedList; import java.util.Stack; public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } /* *树的深度优先遍历 *按树的每一条分支遍历树 *利用一个栈进行辅助 */ public void DeepFirstSearch_NoRecursion(TreeNode root) { Stack<TreeNode> treeStack = new Stack<>(); if(root == null) { return; } treeStack.add(root); while(!treeStack.isEmpty()) { TreeNode currentNode = treeStack.pop();//栈顶元素出栈 System.out.print(currentNode.val);//访问节点 /*深搜需要先访问左子树的一条分支,故右孩子先入栈*/ if(currentNode.right != null) { treeStack.push(currentNode.right); } if(currentNode.left != null) { treeStack.push(currentNode.left); } } } /* *广度优先遍历 *按照树的每一层进行遍历 *利用一个队列进行辅助 */ public void BreadFirstSearch_NoRecursion(TreeNode root) { LinkedList<TreeNode> treeQueue = new LinkedList<>();//用链表来模拟队列 if(root == null) { return; } treeQueue.add(root); while(!treeQueue.isEmpty()) { TreeNode currenNode = treeQueue.getFirst(); //获取队首元素 System.out.println(currenNode.val);//访问节点 if(currenNode.left != null) { treeQueue.add(currenNode.left);//左子树进队列 } if(currenNode.right != null) { treeQueue.add(currenNode.right);//右子树进队列 } treeQueue.removeFirst();//队首元素访问完出队列 } } }
相关文章推荐
- Hadoop安装过程遇到的坑:
- oracle 创建表空间,用户并授权
- 第9周实践项目3-稀疏矩阵的三元组表示的实现及应用.cp
- “异常 ”的学习
- 100,类扩展
- Objective-C中的内存管理
- 12月17号 类和对象
- 《需求分析与系统设计》阅读笔记之三
- 通过JAVA代码获取手机的一些基本信息(本机号码,SDK版本,系统版本,手机型号)
- NODEJS 初学示例
- 第9周项目1 - 猴子选大王(数组版).cpp
- 绘图 - 8
- iOS button总结
- iOS button总结
- 随机漫步模拟
- MFC中使用OLE/COM操作EXCEL的方法
- Linux中执行shell脚本的4种方法总结
- 论文笔记 Visualizing and understanding convolutional networks
- 第9周项目2 - 对称矩阵压缩存储的实现与应用(2).cpp
- Android捕获异常处理——UncaughtExceptionHandler