树的深度优先遍历和广度优先遍历的原理和java实现代码
来源:互联网 发布:谈谈大数据金融行业应 编辑:程序博客网 时间:2024/06/05 03:48
树的深度优先遍历需要用到额外的数据结构--->栈;而广度优先遍历需要队列来辅助;这里以二叉树为例来实现
import java.util.ArrayDeque;public class BinaryTree { static class TreeNode{ int value; TreeNode left; TreeNode right; public TreeNode(int value){ this.value=value; } } TreeNode root; public BinaryTree(int[] array){ root=makeBinaryTreeByArray(array,1); } /** * 采用递归的方式创建一颗二叉树 * 传入的是二叉树的数组表示法 * 构造后是二叉树的二叉链表表示法 */ public static TreeNode makeBinaryTreeByArray(int[] array,int index){ if(index<array.length){ int value=array[index]; if(value!=0){ TreeNode t=new TreeNode(value); array[index]=0; t.left=makeBinaryTreeByArray(array,index*2); t.right=makeBinaryTreeByArray(array,index*2+1); return t; } } return null; } /** * 深度优先遍历,相当于先根遍历 * 采用非递归实现 * 需要辅助数据结构:栈 */ public void depthOrderTraversal(){ if(root==null){ System.out.println("empty tree"); return; } ArrayDeque<TreeNode> stack=new ArrayDeque<TreeNode>(); stack.push(root); while(stack.isEmpty()==false){ TreeNode node=stack.pop(); System.out.print(node.value+" "); if(node.right!=null){ stack.push(node.right); } if(node.left!=null){ stack.push(node.left); } } System.out.print("\n"); } /** * 广度优先遍历 * 采用非递归实现 * 需要辅助数据结构:队列 */ public void levelOrderTraversal(){ if(root==null){ System.out.println("empty tree"); return; } ArrayDeque<TreeNode> queue=new ArrayDeque<TreeNode>(); queue.add(root); while(queue.isEmpty()==false){ TreeNode node=queue.remove(); System.out.print(node.value+" "); if(node.left!=null){ queue.add(node.left); } if(node.right!=null){ queue.add(node.right); } } System.out.print("\n"); } /** * 13 * / \ * 65 5 * / \ \ * 97 25 37 * / /\ / * 22 4 28 32 */ public static void main(String[] args) { int[] arr={0,13,65,5,97,25,0,37,22,0,4,28,0,0,32,0}; BinaryTree tree=new BinaryTree(arr); tree.depthOrderTraversal(); tree.levelOrderTraversal(); }}
http://outofmemory.cn/code-snippet/4189/biinary-tree-java
阅读全文
0 0
- 树的深度优先遍历和广度优先遍历的原理和java实现代码
- 图的深度优先遍历和广度优先遍历实现
- java实现二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 普通树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的广度优先遍历和深度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 新浪云SAE部署详细图解教程
- 'gbk' codec can't decode byte 0xaf in position 6532: illegal multibyte sequence
- vue 组件回调
- 分组取每组最大的值
- 发布sql view到geoserver服务器(5)
- 树的深度优先遍历和广度优先遍历的原理和java实现代码
- 数据库报错:Table '*.*' doesn't exist
- SERIALIZABLE与EXTERNALIZABLE两种序列化方式的区别
- Spring MVC + MySql 保存中文变乱码
- 撸起袖子自己写一个通用的刷新控件
- Unicode编码的小知识
- delphi XE Datasnap SERVER 在windows 7 下为服务添加描述信息
- iOS-获取控件的隐藏属性并修改
- js总结--2017