Java 层序创建和遍历二叉树
直接上代码
package te.com;
import java.util.LinkedList;
import java.util.Queue;
import java.util.logging.Level;
class BinNode{
Integer val;
BinNode leftNode;
BinNode rightNode;
public BinNode(Integer val) {
this.val = val;
}
public BinNode() {
}
public Integer getVal() {
return val;
}
public void setVal(int val) {
this.val = val;
}
public BinNode getLeftNode() {
return leftNode;
}
public void setLeftNode(BinNode leftNode) {
this.leftNode = leftNode;
}
public BinNode getRightNode() {
return rightNode;
}
public void setRightNode(BinNode rightNode) {
this.rightNode = rightNode;
}
}
public class binTree {
public static void main(String[] args) {
Integer[] a = {3,9,20,null,null,15,7,null,null,null,null};
int i=1;
BinNode root = new BinNode(a[0]); // 根节点
BinNode current = null;
Integer value = null;
//层序创建二叉树
LinkedList<BinNode> queue = new LinkedList<BinNode>();
queue.offer(root);
while(i<a.length) {
current = queue.poll();//从链表中移除并获取第一个节点
value = a[i++];
if(value!=null) {
BinNode left =new BinNode(value);
current.setLeftNode(left);//创建当前节点的左孩子
queue.offer(left); // 在链表尾部 左孩子入队
}
value=a[i++];
if(value!=null) {
BinNode right =new BinNode(value);
current.setRightNode(right);//创建当前节点的右孩子
queue.offer(right);// 在链表尾部 右孩子入队
}
}
levelIetrator(root);
}
public static int levelIetrator(BinNode root) {
if(root==null) {
return -1;
}
Queue<BinNode> queue = new LinkedList<BinNode>();
BinNode current = null;
queue.offer(root);
while(!queue.isEmpty()) {
current = queue.poll();
if(current.getLeftNode()!=null) {
queue.offer(current.getLeftNode());
System.out.println("节点"+current.val+"的左孩子是"+current.getLeftNode().val);
}else {
System.out.println("节点"+current.val+"没有左孩子");
}
if(current.getRightNode()!=null) {
queue.offer(current.getRightNode());
System.out.println("节点"+current.val+"的右孩子是"+current.getRightNode().val);
}else {
System.out.println("节点"+current.val+"没有右孩子");
}
}
return 1;
}
}
运行结果

Java 层序创建和遍历二叉树的更多相关文章
- C++ 创建和遍历二叉树
一个简单的创建和遍历二叉树的C++程序,二叉树的其他操作程序待更新. #include <iostream> using namespace std; struct BiTNode{ ch ...
- 请使用java来构造和遍历二叉树?
[分析] 二叉树的结构:根节点.左子树.右子树.其中左子树的值必须小于根节点,右子树的值必须大于根节点.构造这种树结构,就是创建一个类,并提供一个方法,当给定一个值时,它能够自动创建节点并自动挂到二叉 ...
- Java实现二叉树的创建和遍历操作(有更新)
博主强烈建议跳过分割线前面的部分,直接看下文更新的那些即可. 最近在学习二叉树的相关知识,一开始真的是毫无头绪.本来学的是C++二叉树,但苦于编译器老是出故障,于是就转用Java来实现二叉树的操作.但 ...
- java创建二叉树并实现非递归中序遍历二叉树
java创建二叉树并递归遍历二叉树前面已有讲解:http://www.cnblogs.com/lixiaolun/p/4658659.html. 在此基础上添加了非递归中序遍历二叉树: 二叉树类的代码 ...
- java创建二叉树并递归遍历二叉树
二叉树类代码: package binarytree; import linkqueue.LinkQueue; public class BinaryTree { class Node { publi ...
- JAVA递归、非递归遍历二叉树
前序遍历:1.访问根节点 2.前序遍历左子树 3.前序遍历右子树 中序遍历:1.中序遍历左子树 2.访问根节点 3.中序遍历右子树 后序遍历:1.后序遍历左子树 2.后序遍历右子树 3.访问根节点-- ...
- Java递归方法遍历二叉树的代码
将内容过程中经常用的内容做个记录,如下内容内容是关于Java递归方法遍历二叉树的内容. package com.wzs; public class TestBinaryTree { public st ...
- c/c++二叉树的创建与遍历(非递归遍历左右中,破坏树结构)
二叉树的创建与遍历(非递归遍历左右中,破坏树结构) 创建 二叉树的递归3种遍历方式: 1,先中心,再左树,再右树 2,先左树,再中心,再右树 3,先左树,再右树,再中心 二叉树的非递归4种遍历方式: ...
- JAVA递归、非递归遍历二叉树(转)
原文链接: JAVA递归.非递归遍历二叉树 import java.util.Stack; import java.util.HashMap; public class BinTree { priva ...
随机推荐
- Bootstrap3基础 container 浏览器宽度与容器宽度的四种配合
内容 参数 OS Windows 10 x64 browser Firefox 65.0.2 framework Bootstrap 3.3.7 editor ...
- 【定制Android系统】Android O 在ROM中添加自己的 so 库(1)——Android.mk 与 Android.bp 的区别【转】
本文转载自: 版权声明:本文为博主原创文章,转载时请注明原作者及出处. https://blog.csdn.net/u014248312/article/details/82020204需求:在 ...
- #2718. 「NOI2018」归程 kruskal重构树
链接 https://loj.ac/problem/2718 思路 我们希望x所在的连通块尽量的大,而且尽量走高处 离线的话可以询问排序,kruskal过程中更新答案 在线就要用kruskal重构树 ...
- Why there is two completely different version of Reverse for List and IEnumerable?
https://stackoverflow.com/questions/12390971/why-there-is-two-completely-different-version-of-revers ...
- P3727 曼哈顿计划E
点分治+SG函数还真是令人意外的组合啊 思路 这道题看到找一条满足条件的链,想到点分治 看到博弈,想到SG函数 然后就变成一道SG函数+点分治的题了 然后1e9的SG函数怎么搞?当然是打表了 然后各种 ...
- [HDU 1976] Software Version
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1976 #include<iostream> #include<cstdio> ...
- HDU 6155 Subsequence Count(矩阵乘法+线段树+基础DP)
题意 给定一个长度为 \(n\) 的 \(01\) 串,完成 \(m\) 种操作--操作分两种翻转 \([l,r]\) 区间中的元素.求区间 \([l,r]\) 有多少个不同的子序列. \(1 \le ...
- vue中find函数
let obj = this.role.find(v => v.code === res.company.role)循环 data对象中的role数组 ,每个数组元素用v代替,code为他的键, ...
- 【AI】微软人工智能学习笔记(一)
数据分析平台 01|数据平台概况图示 上面图中所示就是微软人工智能数据平台的相关的技术. 02.1| Cortana Intelligence Suite 从上面图中可以看到, 其中有一个Cortan ...
- Docker网络配置概述
Overview One of the reasons Docker containers and services are so powerful is that you can connect t ...