1.树形结构的介绍
* 树形结构简介
* 树形结构是一种非线性结构,存储的是“一对多的”关系的数据元素的集合
*
* 树形结构的相关术语:
* 节点(Node):使用树结构存储的每一个数据元素都被称为“节点”
* 节点的度(Degree of Node):某个节点所拥有的子树的个数
* 树的深度(Degree of Tree):树中节点的最大层数
* 叶子节点(Leaf Node):度为0的节点,也叫终端节点
* 分支节点(Branch Node):度不为0的节点,也叫非终端节点或内部节点
* 孩子(child):也可称之为子树或子节点,表示当前节点下层的直接节点
* 双亲(parent):也可称为父节点,表示当前节点的直接上层节点
* 根节点(Root Node):没有双亲节点的节点,在树形结构中只有一个根节点
* 祖先(Ancestor):当前节点上层的所有节点(当前节点的直接祖先节点)
* 子孙(Descendent):当前节点下层的所有节点
* 兄弟(Brother):同一双亲孩子
* 二叉树简介
* 二叉树(Binary Tree)是树形结构的重要类型
* 二叉树特点是每个节点最多只能有两颗子树,且有左右之分
* 二叉树分类
* 满二叉树:除最后一层外,每一层上的所有节点都有两个子节点
* 完全二叉树:除最后一层可能不满外,其他各层都达到该层节点的最大数,最后一层如果不满,该层节点全部靠左排
* 二叉树遍历方式
* 前序遍历:根-左-右
* 中序遍历:左-根-右
* 后序遍历:左-右-根
* 层序遍历:从上至下逐层遍历
2.基于二叉树结构实现元素排序处理的容器
//添加元素和排序处理,不能对所有数据类型进行排序,进行上限限定
public class Text4<E extends Integer> {
private Node root; //根节点地址
//将元素放入排序器的方法
private void add(E element){
//实例化节点对象
Node<E> node=new Node<>(element);
//判断当前二叉树中是否有根节点
if (this.root==null){
this.root=node;
}else {
this.root.addNode(node);
}
}
//元素在排序器中进行排序的方法
private void sort(){
if (this.root==null){
return;
}
this.root.inorderTraversal();
}
//定义节点类
//节点类中添加节点
/**
* 三个成员变量
* 1、当前节点中存储的元素
* 2、当前节点的左子树节点的地址
* 3、当前节点的右子树节点的地址
*
*/
/**
* 两个成员方法
*方法
* 1、添加节点,进行元素大小的比较,决定放入位置
* 2、遍历单个节点的方法,符合中序排列遍历树结构的理念
*
*/
class Node<E extends Integer>{
//***节点地址为什么是Node类型???***
private E item; //存放节点元素
private Node left; //存放左子树节点地址
private Node right; //存放右子树节点地址
//构造器
//***构造器中为什么没有左右子树地址???***
Node(E item){
this.item=item;
}
/**
* 添加节点方法
*/
private void addNode(Node node){
//完成新节点元素与当前节点元素大小的判断
//如果新节点中的元素小于当前节点中元素,则新节点放入当前节点的左子树中
//***为什么要使用intValue()方法?this.item为什么可以代表当前元素???***
if (node.item.intValue() < this.item.intValue()){
if (this.left==null){
this.left=node;
}else {
this.left.addNode(node);
}
}else {
if (this.right==null){
this.right=node;
}else {
this.right.addNode(node);
}
}
}
//使用中序遍历二叉树
//***遍历的时候将元素都弹出来了么?要不陷入死循环?***
public void inorderTraversal(){
if (this.left != null){
this.left.inorderTraversal();
}
System.out.println(this.item);
if (this.right != null){
this.right.inorderTraversal();
}
}
}
public static void main(String[] args) {
Text4<Integer> aa=new Text4<>();
//12,10,8,5,6,20
aa.add(100);
aa.add(80);
aa.add(90);
aa.add(85);
aa.add(110);
aa.add(50);
aa.add(60);
aa.add(70);
aa.add(65);
aa.add(120);
aa.add(119);
aa.add(121);
aa.sort();
}
}