java-二叉树广度优先实现、深度优先之前序实现(非递归)
来源:互联网 发布:sql 日期排序 编辑:程序博客网 时间:2024/06/05 07:59
深度优先遍历--->栈;
广度优先遍历--->队列;
这里以二叉树为例来实现。
- 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();
- }
- }
- 运行结果:
- 13 65 97 22 25 4 28 5 37 32
13 65 5 97 25 37 22 4 28 32
注:深度优先(前、中、后序)可以使用递归、非递归实现;广度优先一般都采用非递归实现,递归不太好完成!
0 0
- java-二叉树广度优先实现、深度优先之前序实现(非递归)
- java-二叉树广度优先实现、深度优先之前序实现(非递归)
- 二叉树深度优先(DFS)和广度优先(BFS)算法的非递归实现
- 深度优先遍历/广度优先遍历(递归+非递归java实现)
- 简要说明树的深度优先、广度优先遍历算法,及非递归实现的特点
- 图的深度优先(非递归)、广度优先、最小生成树的C++实现
- 简要说明树的深度优先、广度优先遍历算法,及非递归实现的特点
- 简述树的深度优先算法、广度优先算法,及非递归实现的特点。
- 树的深度优先遍历和广度优先遍历非递归实现.
- 二叉树的深度优先遍历(递归、非递归),广度优先遍历(递归)
- 深度优先、广度优先java实现
- 树与二叉树的深度优先与广度优先算法(递归与非递归)
- 树与二叉树的深度优先与广度优先算法(递归与非递归)
- 二叉树基本操作的递归实现(二叉树建立,先序,中序,后序,深度的递归遍历。广度优先,高度优先的非递归遍历)
- java实现二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先和广度优先遍历
- Android线程的创建和启动
- AdapterViewFlipper的功能和用法
- 代码规范
- 用Spring提供的JUnit框架扩展对DAO或Service层进行单元测试
- java-二叉树广度优先实现、深度优先之前序实现(非递归)
- CF 496C(Removing Columns-贪心取字典序)
- listview 使用overscroll 解决 上拉下拉 时候 边界出现阴影 并且自定义图案
- Minimum Window Substring
- 【C语言】快速排序
- web 响应式设计
- android手机和电脑间拷贝文件
- Ubuntu Desktop修改用户名和计算机名
- java 实现二叉树深度优先遍历的 前、中、后序遍历(递归)