创建一棵二叉树,并进行先序,层次遍历
/**
* @Author: DiTian
* @Description: 树的创建
* @Date: Created in 16:59 2021/7/28
*/
public class BTNode {
//定义一个二叉树的结点
private int data;
private BTNode lchild;
private BTNode rchild;
//构造函数
public BTNode(){
}
//新的构造函数,其实也可以简写
public BTNode(int data ,BTNode lchild ,BTNode rchild){
this.data=data;
this.lchild=lchild;
this.rchild=rchild;
}
//以下就是data lchild rchild的set,get函数
public void setdata(int data){
this.data=data;
}
public int getdata(){
return data;
}
public void setlchild(BTNode lchild ){
this.lchild=lchild;
}
public BTNode getlchild(){
return this.lchild;
}
public void setrchild(BTNode rchild ){
this.rchild=rchild;
}
public BTNode getrchild(){
return this.rchild;
}
//递归先序创建普通二叉树
//以输入的值是否为0来确定其是不是有孩子结点。
public static BTNode preCreat(BTNode btnode){
Scanner in =new Scanner(System.in);
System.out.println("输入结点的值");
int value=in.nextInt();
if(value!=0){
btnode=new BTNode();
btnode.setdata(value);
//以下两行是核心代码
btnode.setlchild(preCreat(btnode.getlchild()));
btnode.setrchild(preCreat(btnode.getrchild()));
}
else
//这个是一定要有的,确定最终的结束结点
btnode=null;
return btnode;
}
//先序遍历以及访问处理
public static void visit(BTNode btnode){
if(btnode!=null)
System.out.print(btnode.getdata() + " ,");
}
public static void preorder(BTNode btnode) {
if(btnode!=null){
visit(btnode);
preorder(btnode.getlchild());
preorder(btnode.getrchild());
}
}
//树的层次遍历
public static List<List<Integer>> levelOrder(BTNode root) {
List<List<Integer>> lists = new ArrayList<>();
// 判空处理
if (root == null) {
return lists;
}
// 这里存放树的节点
List<BTNode> nodes = new ArrayList<>();
// 先把root节点加入节点集合
nodes.add(root);
// 如果节点集合有节点需要遍历
while (!nodes.isEmpty()) {
// 设置遍历集合大小
int size = nodes.size();
// 存放数据
List<Integer> list = new ArrayList<>();
for (int i = 0; i < size; i++) {
// 取出第一集合元素,按照加入集合顺序打印
BTNode remove = nodes.remove(0);
// 把节点(类似于根节点)信息加入信息集合
list.add(remove.data);
if (remove.lchild != null) {
// 如果有左孩子先加左孩子
nodes.add(remove.lchild);
}
if (remove.rchild != null) {
// 如果有右孩子加入右孩子
nodes.add(remove.rchild);
}
}
// 本次数据加入总的数据集合中
lists.add(list);
}
return lists;
}
//测试
public static void main(String[] args){
BTNode tree=new BTNode();
tree=preCreat(tree);
preorder(tree);
System.out.println(levelOrder(tree));
}
}