java实现多种二叉树的建立_java实现二叉树的构建以及3种遍历方法

1 packagetree;2

3 importjava.util.LinkedList;4 importjava.util.List;5

6 /**

7 * 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历8 *9 * 参考资料0:数据结构(C语言版)严蔚敏10 *11 * 参考资料1:http://zhidao.baidu.com/question/81938912.html

12 *13 * 参考资料2:http://cslibrary.stanford.edu/110/BinaryTrees.html#java14 *15 *@authorocaicai@yeah.net @date: 2011-5-1716 *17 */

18 public classBinTreeTraverse2 {19

20 private int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9};21 private static List nodeList = null;22

23 /**

24 * 内部类:节点25 *26 *@authorocaicai@yeah.net @date: 2011-5-1727 *28 */

29 private static classNode {30 Node leftChild;31 Node rightChild;32 intdata;33

34 Node(intnewData) {35 leftChild = null;36 rightChild = null;37 data =newData;38 }39 }40

41 public voidcreateBinTree() {42 nodeList = new LinkedList();43 //将一个数组的值依次转换为Node节点

44 for (int nodeIndex = 0; nodeIndex < array.length; nodeIndex++) {45 nodeList.add(newNode(array[nodeIndex]));46 }47 //对前lastParentIndex-1个父节点按照父节点与孩子节点的数字关系建立二叉树

48 for (int parentIndex = 0; parentIndex < array.length / 2 - 1; parentIndex++) {49 //左孩子

50 nodeList.get(parentIndex).leftChild =nodeList51 .get(parentIndex * 2 + 1);52 //右孩子

53 nodeList.get(parentIndex).rightChild =nodeList54 .get(parentIndex * 2 + 2);55 }56 //最后一个父节点:因为最后一个父节点可能没有右孩子,所以单独拿出来处理

57 int lastParentIndex = array.length / 2 - 1;58 //左孩子

59 nodeList.get(lastParentIndex).leftChild =nodeList60 .get(lastParentIndex * 2 + 1);61 //右孩子,如果数组的长度为奇数才建立右孩子

62 if (array.length % 2 == 1) {63 nodeList.get(lastParentIndex).rightChild =nodeList64 .get(lastParentIndex * 2 + 2);65 }66 }67

68 /**

69 * 先序遍历70 *71 * 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已72 *73 *@paramnode74 * 遍历的节点75 */

76 public static voidpreOrderTraverse(Node node) {77 if (node == null)78 return;79 System.out.print(node.data + " ");80 preOrderTraverse(node.leftChild);81 preOrderTraverse(node.rightChild);82 }83

84 /**

85 * 中序遍历86 *87 * 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已88 *89 *@paramnode90 * 遍历的节点91 */

92 public static voidinOrderTraverse(Node node) {93 if (node == null)94 return;95 inOrderTraverse(node.leftChild);96 System.out.print(node.data + " ");97 inOrderTraverse(node.rightChild);98 }99

100 /**

101 * 后序遍历102 *103 * 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已104 *105 *@paramnode106 * 遍历的节点107 */

108 public static voidpostOrderTraverse(Node node) {109 if (node == null)110 return;111 postOrderTraverse(node.leftChild);112 postOrderTraverse(node.rightChild);113 System.out.print(node.data + " ");114 }115

116 public static voidmain(String[] args) {117 BinTreeTraverse2 binTree = newBinTreeTraverse2();118 binTree.createBinTree();119 //nodeList中第0个索引处的值即为根节点

120 Node root = nodeList.get(0);121

122 System.out.println("先序遍历:");123 preOrderTraverse(root);124 System.out.println();125

126 System.out.println("中序遍历:");127 inOrderTraverse(root);128 System.out.println();129

130 System.out.println("后序遍历:");131 postOrderTraverse(root);132 }133

134 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值