java非递归与非递归创建有序的二叉树
二叉树
二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分 。
二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点
二叉树是数据结构中的线性存储的结构,那什么叫有序的二叉树呢?不然就是在存储数据的时候是按照数据大小进行存储,在java语言中也存在此结构的类ThreeSet类,它是一个容器,用来存放数据且其中不能存放相同元素,因为.二叉树认为能够存放在树形结构中的元素都是有序元素。例如定义一组数据{7,2,8,1,4,3,5},在树形结构中如下图所示。
二叉树的遍历过程中有三种方式,分别是先序、中序和后序,通常情况下要熟悉三种遍历的方式。一般中序输出是有顺序的,从小到大或者从大到小。
现在我们需要构建一颗普通二叉树(不具有顺序)
二叉树的创建
二叉树实则是一颗倒立着的树,拥有结点、左右子结点,所以构建二叉树的结构具有很多方式,而二叉树的样式也有很多,接下来重点介绍三种不同方式创建二叉树,分别是普通无序二叉树,有序递归和有序非递归创建二叉树。
二叉树的成员变量
构建基本的成员变量
public class Node {
//构建一个二叉树结点类
public Node leftNode;//左节点
public Node rightNode;//右节点
public int data;//结点里存放的数据
public Node root;//根节点
public List<Node>datas;//构建结点的集合
public Node() {
//无参的构造方法
}
public Node(Node leftNode,Node rightNode,int date) {
//初始化一个结点
this.leftNode=leftNode;
this.rightNode=rightNode;
this.date=date;
}
public Node(int date) {
//初始化只包含一个数据的结点
this(null,null,date);
}
}
接下来构建普通的二叉树方法(非递归)
public void createNode(int[] arr){
datas = new ArrayList<Node>();
for(int i:arr){
datas.add(new Node(i));
}
root = datas.get(0);//初始化根节点
for(int i=0