树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为节点)按分支关系组织起来的结构。二叉树(Binary Tree)是每个节点最多有两个子树的有序树。通常子树被称作“左子树”和“右子树”。
二叉树的分类及特点:
(1)完全二叉树
完全二叉树是二叉树的-一个分类,它的特点是每个节点的孩子节点的数量可以是0,1, 2个,除此之外它要求每层节点添加,必须是从左到右,不允许跳着添加。
(2)满二叉树(Full Binary tree)
满二叉树它的特点是每个节点的孩子节点要么没有,要么就是两个,不允许出现单个孩子的情况。
(3)二叉搜索树(Ordered Binary Tree )
也称二叉排序树,这个是我们接触的最多的一种结构, 它要求节点的左子树小于该节点本身,右子树大于该节点,每个节点都符合这样的规则,对二叉搜索树进行中序遍(左中右)历就得得到一个有序的序列
(4)均衡二叉树( Balanced Binary Tree)
均衡二叉树指的是-一个节点的左右子树的高度差值不能大于1,均衡二叉树一般都是在二叉搜索树的基础之上添加自动维持平衡的性质,这种树的插入,搜索,删除的综合效率比较高。
(5)完美二叉树(Perfect binary Tree)
完美二叉树是理想中的一种二叉树,这种树的特点就是非常完美,每个节点都有两个孩子节点,并且每层都被完全填充,完美二叉树的叶子节点的高度都是一样。
二叉搜索树算法的排序规则:
1、选择第一个元素作为根节点
2、之后如果元素大于根节点放在右子树,如果元素小于根节点,则放在左子树
3、最好按照中序遍历的方式进行输出,则可以得到排序的结果(左→根→右)
先序遍历:根左右
后序遍历:左右根
如:1、2、3、4、5、6、7、8、9、10
实例代码:
主类:
package com.booy1;
public class BinaryTreeTest {
public static void main(String[] args) {
BinaryTree bt = new BinaryTree();
bt.add(6);
bt.add(5);
bt.add(9);
bt.add(8);
bt.add(1);
bt.add(7);
bt.add(2);
bt.print();
}
}
BinaryTree 类
package com.booy1;
public class BinaryTree {
private Node root;
//添加节点
public void add(int data){
if(root==null) {
root = new Node(data);
}else {
root.addNode(data);
}
}
//遍历节点
public void print(){
root.printNode();
}
private class Node{
private int data;
private Node left;
private Node right;
public Node(int data ){
this.data = data;
}
//添加节点
public void addNode(int data){
if(this.data>data) {
if(this.left==null) {
this.left = new Node(data);
}else {
this.left.addNode(data);
}
}else{
if(this.right==null) {
this.right = new Node(data);
}else {
this.right.addNode(data);
}
}
}
//遍历节点
public void printNode(){
if(this.left != null) {
this.left.printNode();
}
System.out.print(this.data+">");
if(this.right != null) {
this.right.printNode();
}
}
}
}
/**
运行结果:
1>2>5>6>7>8>9>
*/