原文链接:http://driftcloudy.iteye.com/blog/782873
深度优先/广度优先遍历二叉树的算法(百度面试题):
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();
}
}
分享到:
相关推荐
A星八数码/广度优先/深度优先/粒子群寻优算法/遗传算法/蚁群算法/BP神经网络/卷积神经网络
人工智能结课作业(A星八数码/广度优先/深度优先/粒子群寻优算法/遗传算法/蚁群算法/BP神经网络/卷积神经网络) 简介 本项目包含我当时人工智能与专家系统的结课作业。总共分为三大部分,每部分由几个相关算法组成...
一、 实验题目: 图的应用——深度优先/广度优先搜索遍历 二、 实验内容: 很多涉及图上操作的算法都是以图的遍历操作为基础的。试编写一个算法,实现图的深度优先和广度优先搜索遍历操作。
人工智能结课作业(A星八数码/广度优先/深度优先/粒子群寻优算法/遗传算法/蚁群算法/BP神经网络/卷积神经网络) - - 小白不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的课程设计,代码都测试ok,...
本源文件CPP中代码使用深度优先和广度优先遍历图的算法。
数据结构课程中的深度优先搜索算法、广度优先搜索算法的C语言程序,在Turbo C 2.0上调试通过。
java 实现图数据结构以及深度优先和广度优先算法
无向图的深度优先搜索和广度优先搜索,即DFS和BFS算法
深度优先及广度优先算法c语言源码,深度优先及广度优先算法c语言源码
算法面试通关40讲完整课件 27-31 深度优先DFS+广度优先BFS 算法面试通关40讲完整课件 27-31 深度优先DFS+广度优先BFS 算法面试通关40讲完整课件 27-31 深度优先DFS+广度优先BFS 算法面试通关40讲完整课件 27-31 深度...
哈尔滨工业大学计算机科学与技术试验之图的深度与广度优先算法
图的深度遍历和广度遍历是两个重要的算法,这也是我们理解并掌握图这一数据结构的基础。通过此程序算法可以进一步掌握图的构造以及遍历的相关知识。
基于深度优先算法、广度优先算法、动态规划、分支限界法、回溯法、贪心算法解决TSP问题python源码.zip基于深度优先算法、广度优先算法、动态规划、分支限界法、回溯法、贪心算法解决TSP问题python源码.zip基于深度...
程序设计任务: 设计一个程序,实现以邻接表或者邻接矩阵为存储结构,实现连通无向图的深度优先和广度优先遍历。基本要求:以邻接表或者邻接矩阵为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的...
int v) //从顶点v开始深度优先遍历图 void DFSTraverse(ALGraph *G) //深度优先遍历图 void BFSTraverse(ALGraph *G) //广度优先遍历图 <br>队列的基本操作设置如下:(具体操作上一次上机题中已经...
实现深度优先广度优先算法
BFS DFS 深度优先搜索 广度优先搜索 图 输出所有路径 输出最短路径 随便输出一条可能的路径
数据结构课程中的深度优先搜索算法、广度优先搜索算法的C语言程序,在Turbo C 2.0上调试通过。
网上大部分解决8数码问题都只采用宽度优先算法。我在宽度优先的基础上,设计出深度优先算法。并制作出界面,方便输入、输出。希望能对学习相关内容的同志有所帮助
图作为较为复杂的数据结构,对图的操作首先应该了解图的深度优先和广度优先搜索遍历算法!