今天简单了解了下二叉树算法。
二叉树:二叉树是用来存储数据的,就像树一样,它每个节点下会有左右两个节点构(没有也可以)成新的二叉树。
了解一下代码
package treepath;
//创建二叉树,其实创建二叉树很简单。
public class TreePath {
int data; //根节点
TreePath left;//左树
TreePath right;//右树
//为二叉树赋值
TreePath(int data){
this.data = data;
left = null;
right = null;
}
//以下代码是将数组中的数据以图片中的形式展现出来
//:传入一个数(int data),判断data和根节点的大小
//如果大于根节点,判断右树是否为空,如果为空将data作为
//右树的根节点,在形成一个新的二叉树。我的理解 二叉树就是一个根节点加两个空的左右树,之后进行递归,将数据以图片形式展现出来。
public void insert(TreePath root,int data){
if(data >root.data){
if(root.right == null){
root.right = new TreePath(data);
}else{
insert(root.right,data);
}
}else{
if(root.left == null){
root.left = new TreePath(data);
}else{
insert(root.left,data);
}
}
}
}
//不同方式的遍历
//先序遍历 根左右-》输出左 根-》左树-》右树
//中根遍历 左根右-》 先输出 左树-》根-》右树
//后根遍历 左右根-》 先输出 左树-》右树-》根(方法没写)
package treepath;
public class TreePreoreder {
//先序遍历
public void inPreoreder(TreePath root){
if(root != null){
System.out.print(root.data+"->");
inPreoreder(root.left);
inPreoreder(root.right);
}
}
//中续遍历
public void midPreoreder(TreePath root){
if(root != null){
midPreoreder(root.left);
System.out.print(root.data+"->");
midPreoreder(root.right);
}
}
}
//测试
package treepath;
public class TestTree {
public static void main(String[] args) {
//将数据存入到数组中,也就是图片中的数据
int[] array = {12,76,35,22,16,48,90,46,9,40};
TreePreoreder tp = new TreePreoreder();
//以12作为起始的节点
TreePath root = new TreePath(array[0]);
//循环遍历,最后就是图片中的样子
for(int i =1;i<array.length;i++){
root.insert(root, array[i]);
}
//先序遍历
//tp.inPreoreder(root);
//中序遍历
tp.midPreoreder(root);
}
}
当运行上面的程序后结果如下:
先根遍历:
12-9-76-35-22-16-48-46-40-90-
中根遍历:
9–12–16–22–35–40–46–48–76–90–
后根遍历:
9—16—22—40—46—48—35—90—76—12—