「二叉树广度遍历java」二叉树广度遍历 递归
今天给各位分享二叉树广度遍历java的知识,其中也会对二叉树广度遍历 递归进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
Java 语言中 二叉树的遍历
很直观的思想,照做就可以了,下面是抄袭自 的样列代码 :)
// 广度优先遍历,给出图邻接矩阵和开始遍历的节点
public static void traverse_BFS(int[][] arcs_in, int begin) {
pre = begin;
if (arcs_in == null || arcs_in.length == 0 ||
arcs_in.length != arcs_in[0].length || begin 0) {
System.err.println("wrong arcs[][] or begin!");
return;
}
arcs = arcs_in;
num = arcs.length;
hasVisit = new boolean[num];
Queue queue = new Queue();
hasVisit[begin] = true;
queue.enQueue(begin);
int temp, min, n = 0;
while (!queue.isEmpty()) {
temp = ( (Integer) queue.deQueue()).intValue();
for (int i = 1; i num; i++) {
// 距离最短的优先入队
min = Integer.MAX_VALUE;
for (int j = 0; j num; j++) {
if (!hasVisit[j] arcs[temp][j] != -1 arcs[temp][j] min) {
min = arcs[temp][j];
n = j;
}
}
if (min == Integer.MAX_VALUE) {
break;
}
else {
hasVisit[n] = true;
queue.enQueue(n);
Main.Q_BFS.enQueue(n);
Main.length_BFS += Main.arcs[pre][n];
pre = n;
}
}
}
}
二叉树的java实现与几种遍历
二叉树的定义
二叉树(binary tree)是结点的有限集合,这个集合或者空,或者由一个根及两个互不相交的称为这个根的左子树或右子树构成.
从定义可以看出,二叉树包括:1.空树 2.只有一个根节点 3.只有左子树 4.只有右子树 5.左右子树都存在 有且仅有这5种表现形式
二叉树的遍历分为三种:前序遍历 中序遍历 后序遍历
前序遍历:按照“根左右”,先遍历根节点,再遍历左子树 ,再遍历右子树
中序遍历:按照“左根右“,先遍历左子树,再遍历根节点,最后遍历右子树
后续遍历:按照“左右根”,先遍历左子树,再遍历右子树,最后遍历根节点
其中前,后,中指的是每次遍历时候的根节点被遍历的顺序
具体实现看下图:
作为一个面试官,我会问初级java工程师哪些问题?
初级java工程师多数是刚毕业或者工作1,2年的新人。对于新人,面试中基础问题会问道很多,因为先要考察这个人的基础。
关于基础类的题目,我在面试初级java工程师的时候一般会问下面两大类问题,每类5个题目,这样下来我就基本可以了解这位工程师的程度了。
java基础类
面向对象基础类
java基础类
1.描述一下java的访问修饰符,和它们之间的区别?
回答:如果可以回到出public,private,protected,就算是ok;回答出default的,加分。
2. int和Integer 区别?
回答:如果回答出Integer是int的包装类,就算ok;回答出其他的基本类型和它们相应的包装类,加分。
3.如何定义一个单精度浮点类型的变量?
回答:float 变量名=1.2f ;回答出不加最后的f为双精度浮点类型,加分
4. equals和==的区别?
回答: equals是值比较(一般处理java开发都会这么说,算是ok的)而==是引用比较(或者对象比较);回答equals是可以自定义的,加分
5.将一个数组作为参数传递到一个方法中,在方法中,数组内的元素值被改变了,那么在方法外部,这个数组内的元素是否也被改编了?
回答:是,因为java方法中传递的是引用,就ok。如果回答中,将引用说明了自己的理解,加分。
面向对象基础类
1.重载和重写的区别?
回答:这个看个人理解,理解没有什么大的偏差就ok;回答出多态相关的,加分。
2.构造方法能不能重载?
回答:可以重载,ok;回答构造方法时不能继承的,所以如果要调用指定父类构造器就必须重写子类构造方法,加分。
3.抽象方法(abstract)是否可以被final、static、native修饰?
回答:都不可以,因为抽象方法是必须子类实现的,final方法时不可以被重写的,static是父类必须实现的方法,native是本地语言实现的方法。回答出封装和继承相关的,加分
4.当父类引用指向子类对象的时候,子类重写了父类方法和属性,那么当访问属性的时候,访问是谁的属性?调用方法时,调用的是谁的方法?
回答:访问的是父类的属性,调用的是子类的方法,ok;如果可以画图解释的话,加分
5.抽象类和接口有什么异同?
回答:一些类定义上的区别,ok;回答在应用过程中,如何根据业务定义接口,加很多分
最后,如果前面问题回答的不错,会补充两个编程习惯问题。
1.在你写过的代码中,你写过超过2层的循环吗,怎么实现的?
回答:没有,就算ok;如果回答有,听一下实现,如果原因说不出来,扣分。
2.在你写过的代码中,if语句最多嵌套了几层,最多有多少分支,怎么实现的?
回答:3层以下,就算ok;如果回答3层以上,听一下实现,如果原因说不出来,扣分。
4,5个分支,就算ok;如果回答5个分支以上,听一下实现,如果原因说不出来,扣分。
最后两个题其实比较陷阱,但是正是一个反向的思考才能了解面试者之前的工作状态。
如果面试者在平日里就有好的习惯,自然不用担心。
怎样使用java对二叉树进行层次遍历
public class BinaryTree {
int data; //根节点数据
BinaryTree left; //左子树
BinaryTree right; //右子树
public BinaryTree(int data) //实例化二叉树类
{
this.data = data;
left = null;
right = null;
}
public void insert(BinaryTree root,int data){ //向二叉树中插入子节点
if(dataroot.data) //二叉树的左节点都比根节点小
{
if(root.right==null){
root.right = new BinaryTree(data);
}else{
this.insert(root.right, data);
}
}else{ //二叉树的右节点都比根节点大
if(root.left==null){
root.left = new BinaryTree(data);
}else{
this.insert(root.left, data);
}
}
}
}
当建立好二叉树类后可以创建二叉树实例,并实现二叉树的先根遍历,中根遍历,后根遍历,代码如下:
package package2;
public class BinaryTreePreorder {
public static void preOrder(BinaryTree root){ //先根遍历
if(root!=null){
System.out.print(root.data+"-");
preOrder(root.left);
preOrder(root.right);
}
}
public static void inOrder(BinaryTree root){ //中根遍历
if(root!=null){
inOrder(root.left);
System.out.print(root.data+"--");
inOrder(root.right);
}
}
public static void postOrder(BinaryTree root){ //后根遍历
if(root!=null){
postOrder(root.left);
postOrder(root.right);
System.out.print(root.data+"---");
}
}
public static void main(String[] str){
int[] array = {12,76,35,22,16,48,90,46,9,40};
BinaryTree root = new BinaryTree(array[0]); //创建二叉树
for(int i=1;iarray.length;i++){
root.insert(root, array[i]); //向二叉树中插入数据
}
System.out.println("先根遍历:");
preOrder(root);
System.out.println();
System.out.println("中根遍历:");
inOrder(root);
System.out.println();
System.out.println("后根遍历:");
postOrder(root);
二叉树广度遍历java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于二叉树广度遍历 递归、二叉树广度遍历java的信息别忘了在本站进行查找喔。