二叉树是一种非常重要的数据结构,接下来看看如何用代码来实现二叉树,以及二叉树的插入和遍历。
- 二叉树的结构
首先我们来创建一个二叉树的结构
public class Node {
public Node leftNode; //左子节点
public Node rightNode; //右子节点
public Object value; //当前节点的值
}
- 向二叉树中插入数据
在此我们以插入数字为例,若希望插入别的不同的数据类型可以自行更改判定条件。
public void add(int s) {
//如果本节点值为空 将s插入到本节点
if(this.value == null) {
this.value = s;
//若s小于本节点的值 则将s插入到本节点的左子树
}else if((int)this.value > s) {
//若左子树为空
if(null == leftNode) {
//创建左子树
leftNode = new Node();
}
//将s插入到本节点的左子树
leftNode.add(s);
}else {
if(null == rightNode) {
rightNode = new Node();
}
rightNode.add(s);
}
}
- 二叉树的遍历
前序遍历:根 => 左 => 右
中序遍历:左 => 根 => 右
后序遍历:左 => 右 => 根
中序遍历的代码实现
public ArrayList<Object> zhongxu() {
//创建一个arraylist用来存储从二叉树中读取的数值
ArrayList<Object> list = new ArrayList<Object>();
//左子树不为空 对左子树进行中序遍历
if(null != leftNode) {
leftNode.zhongxu();
//将左子树节点遍历所得到的list添加到总的list中来
list.addAll(leftNode.zhongxu());
}
//左子树遍历完后遍历根节点
list.add(this.value);
//最后对右子树进行中序遍历
if(null != rightNode) {
rightNode.zhongxu();
list.addAll(rightNode.zhongxu());
}
return list;
}
二叉树三种遍历的基本思想是一样的,另外两种不再给出,下面是插入以及中序遍历的测试结果
public static void main(String[] args) {
int arr[] = {67, 7, 30, 73, 10, 0, 78, 81, 10, 74};
Node node = new Node();
for(int a:arr) {
node.add(a);
}
System.out.println(node);
System.out.println(node.zhongxu());
}