简单介绍一下二叉树,二叉树是每个结点最多有两个子树的树结构,通常子树被称作“左子树”和“右子树”。二叉树的遍历有三种情况,前序遍历、中序遍历和后序遍历,算法一般有两种,即递归和迭代循环。其中递归算法比较简单,代码量较少,但是迭代循环比较复杂,需要用栈进行操作,代码量大,程序耗时多,不建议用迭代进行二叉树遍历。

首先创建一个名为Bintree的类,类中先定义二叉树数据结构的一系列属性:

java 生成多叉树 java多叉树的遍历算法_java 生成多叉树


这里用List容器存储二叉树结点中的数据,Stack栈用于后期进行迭代循环。二者均用了泛型。

java 生成多叉树 java多叉树的遍历算法_java 生成多叉树_02


创建了三个构造函数,第一个构造函数显然是用来初始化结点的,第二个是用来初始化结点中的数据。

java 生成多叉树 java多叉树的遍历算法_子树_03


这里定义了一个创建结点的函数,传入数组对象,同时运用List中的ArrayList()方法创建数组容器对象datas,由于datas中存放的是Bintree类类型的,所以datas往里追加数据的时候必须传入的是Bintree类类型,因此调用Bintree(Object data)构造函数。这里数组obj是按二叉树从上到下从左到右的顺序放入数组中的,所以得到的数组索引为0的就是根节点的数据。数组中索引为0的位置存放的是根节点的数据,1的位置存放的是根节点的左子树的数据,2的位置存放的是根节点的右子树的数据……以此类推,下标为奇数是这一级根节点的左子树,下标为偶数的是这一级根节点的右子树。

java 生成多叉树 java多叉树的遍历算法_java 生成多叉树_04


以上是用递归实现二叉树的遍历。

java 生成多叉树 java多叉树的遍历算法_java创建二叉树_05


java 生成多叉树 java多叉树的遍历算法_迭代_06


以上是用迭代进行二叉树的遍历,后序遍历太过复杂,个人认为没有用写的必要。对于迭代前序遍历,是先将二叉树从上到下把右子树按照左右分支依次压入栈中,当按照遍历次序根->左子树遍历完后,再弹栈,此时弹出的右子树充当根节点,再进行遍历。而迭代中序遍历则是先将根节点的数据压入栈中,再从上到下依次把左子树的数据压入栈中,运用了出栈先进后出的原理,先弹出一个左子树,如果弹出的不是根节点,那就接着再弹一个即该左子树的根节点,再把该根节点的右子树压入栈中,再重复上述操作,完成遍历。

java 生成多叉树 java多叉树的遍历算法_java 生成多叉树_07


以上是主方法,关于二叉树的代码建议参考清华大学编写的C++数据结构。