怎么按照要求创建一棵二叉树
怎么创建下图的二叉树?
我写过完全二叉树的创建【数据结构】-java 完全二叉树的创建以及递归遍历算法实现
参考完全二叉树的结点的创建。
对于这种普通的二叉树
我们也可以用递归的方式去创建。
先上代码,朋友们应该就明白个大概了,文本末附总结
树节点的创建
//全部是私有属性,这里用set、get方法返回所需要的属性。
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 void main(String[] args){
BTNode tree=new BTNode();
tree=preCreat(tree);
preorder(tree);
}
那么怎么输入呢?
由于0是结束符号。上 面的那个图其实应该是这样的
所以先序
输入进控制台的是:
1 回车
2 回车
0 回车
4 回车
0 回车
0 回车
3 回车
0 回车
0 回车
输入一个数字回车一次。
总结
每个方法我都封装好了,如果你有需要,则可以直接复制在一个类中进行测试。
我已经亲自测试,结果无误。
核心思想:递归建立普通二叉树,什么时候是空结点。若要创建任意的二叉树注意应该怎么输入。