Java构建树结构的公共方法

如何用Ja-v-a实现树形结构啊?

package tree;

import ja-v-a.util.LinkedList;
import ja-v-a.util.List;

/**
* 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历
*
* 参考资料0:数据结构(C语言版)严蔚敏
*
* 参考资料1:
*
* 参考资料2:
*
* @author ocaicai@ @date: 2011-5-17
*
*/
public class BinTreeTra-v-erse2 {

private int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
private static List<Node> nodeList = null;

/**
* 内部类:节点
*
* @author ocaicai@ @date: 2011-5-17
*
*/
private static class Node {
Node leftChild;
Node rightChild;
int data;

Node(int newData) {
leftChild = null;
rightChild = null;
data = newData;
}
}

public void createBinTree() {
nodeList = new LinkedList<Node>();
// 将一个数组的值依次转换为Node节点
for (int nodeIndex = 0; nodeIndex < array.length; nodeIndex++) {
nodeList.a(new Node(array[nodeIndex]));
}
// 对前lastParentIndex-1个父节点按照父节点与孩子核卜陪节点的数弊历字关系建立二叉树
for (int parentIndex = 0; parentIndex < array.length / 2 – 1; parentIndex++) {
// 左孩子
nodeList.get(parentIndex).leftChild = nodeList
.get(parentIndex * 2 + 1);
// 右孩子
nodeList.get(parentIndex).rightChild = nodeList
.get(parentIndex * 2 + 2);
}
// 最后一个父节点:因为最后一个父节点可能没有右孩子,所以单独拿出来处理
int lastParentIndex = array.length / 2 – 1;
// 左孩子
nodeList.get(lastParentIndex).leftChild = nodeList
.get(lastParentIndex * 2 + 1);
// 右孩子,如果数组的长度为奇数才建立右孩子改蠢
if (array.length % 2 == 1) {
nodeList.get(lastParentIndex).rightChild = nodeList
.get(lastParentIndex * 2 + 2);
}
}

/**
* 先序遍历
*
* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已
*
* @param node
* 遍历的节点
*/
public static void preOrderTra-v-erse(Node node) {
if (node == null)
return;
System.out.print(node.data + " "😉;
preOrderTra-v-erse(node.leftChild);
preOrderTra-v-erse(node.rightChild);
}

/**
* 中序遍历
*
* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已
*
* @param node
* 遍历的节点
*/
public static void inOrderTra-v-erse(Node node) {
if (node == null)
return;
inOrderTra-v-erse(node.leftChild);
System.out.print(node.data + " "😉;
inOrderTra-v-erse(node.rightChild);
}

/**
* 后序遍历
*
* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已
*
* @param node
* 遍历的节点
*/
public static void postOrderTra-v-erse(Node node) {
if (node == null)
return;
postOrderTra-v-erse(node.leftChild);
postOrderTra-v-erse(node.rightChild);
System.out.print(node.data + " "😉;
}

public static void main(String[] args) {
BinTreeTra-v-erse2 binTree = new BinTreeTra-v-erse2();
binTree.createBinTree();
// nodeList中第0个索引处的值即为根节点
Node root = nodeList.get(0);

System.out.println("先序遍历:"😉;
preOrderTra-v-erse(root);
System.out.println();

System.out.println("中序遍历:"😉;
inOrderTra-v-erse(root);
System.out.println();

System.out.println("后序遍历:"😉;
postOrderTra-v-erse(root);
}

}

Ja-v-a如何将重复的方

方法
如果您可以使用一个级别的间接,那么我在下面介绍的源送境轴责项耐否方法会将重复的代码减少到最小.
首先,考虑以下供应商界面及其内部类:这里没什么神奇的.内部类只是一个带有私有final字段的bean,一个用于初始化它们的私有构造函数,publicgetter,一个工流哪龙深济培刚散厂方法和一个覆盖toString()方法.该接口仅定义一个返回内部类实例的方法.扩春团请注意,内部类是最终的.我们的想法是强制实现不变性,以便不允许其属性发生变化.
然后,让我们创建几个将实现此接口的枚举族买大愿简布延料就.让我们从MyEnu殖哪应则面伟创突题强m1开始,它定义了两个值:接下来是MyEnum2,它只定义了一个值:两个枚举都实现了Propertiessupplier接口,因此团志田激石它们必须为Properties属性()方法提供实现.为了符合这一点,他们必须封装他们在构造函数中接收的Properties实例.在这个间接之后,在所有枚举中重复的唯一代码只是属性字段,接收它作为参数的构造函数及其ge李府四关探灯维怎抗厂tter方法.

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。聚才发仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 tenspace2022@163.com 举报,一经查实,本站将立刻删除。 本文链接:https://www.jucaifa.com/post/1153407.html 商机洞察 金融谷 前沿技术

niuniuniuniu
上一篇 2023年12月4日
下一篇 2023年12月4日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注