码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树的实现

时间:2015-07-11 22:44:31      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

二叉树:

参考链接:http://blog.csdn.net/luckyxiaoqiang/article/details/7518888

http://www.cnblogs.com/vamei/archive/2013/03/17/2962290.html

?

实现:

?

?

import java.util.LinkedList;

import java.util.List;

?

/**

* 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历

*

* 参考资料0:数据结构(C语言版)严蔚敏

*

* 参考资料1:http://zhidao.baidu.com/question/81938912.html

*

* 参考资料2:http://cslibrary.stanford.edu/110/BinaryTrees.html#java

*

*

*/

public class BinTreeTraverse2 {

?

?

????/**

???? * 内部类:节点

???? *

???? *

???? */

????private static class Node {

????????Node leftChild;

????????Node rightChild;

????????int data;

?

????????Node(int newData) {

????????????leftChild = null;

????????????rightChild = null;

????????????data = newData;

????????}

????}

?

????public void createBinTree(List<Node> nodeList,int[] array) {

????????// 将一个数组的值依次转换为Node节点

????????for (int nodeIndex = 0; nodeIndex < array.length; nodeIndex++) {

????????????nodeList.add(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 preOrderTraverse(Node node) {

????????if (node == null)

????????????return;

????????System.out.print(node.data + " ");

????????preOrderTraverse(node.leftChild);

????????preOrderTraverse(node.rightChild);

????}

?

????/**

???? * 中序遍历

???? *

???? * 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已

???? *

???? * @param node

???? * 遍历的节点

???? */

????public static void inOrderTraverse(Node node) {

????????if (node == null)

????????????return;

????????inOrderTraverse(node.leftChild);

????????System.out.print(node.data + " ");

????????inOrderTraverse(node.rightChild);

????}

?

????/**

???? * 后序遍历

???? *

???? * 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已

???? *

???? * @param node

???? * 遍历的节点

???? */

????public static void postOrderTraverse(Node node) {

????????if (node == null)

????????????return;

????????postOrderTraverse(node.leftChild);

????????postOrderTraverse(node.rightChild);

????????System.out.print(node.data + " ");

????}

?

????public static void main(String[] args) {

????????

???????? int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

???????? List<Node> nodeList = new LinkedList<Node>();

????????

????????BinTreeTraverse2 binTree = new BinTreeTraverse2();

????????binTree.createBinTree(nodeList,array);

????????

????????// nodeList中第0个索引处的值即为根节点

????????Node root = nodeList.get(0);

?

????????System.out.println("先序遍历:");

????????preOrderTraverse(root);

????????System.out.println();

?

????????System.out.println("中序遍历:");

????????inOrderTraverse(root);

????????System.out.println();

?

????????System.out.println("后序遍历:");

????????postOrderTraverse(root);

????}

?

}

二叉树的实现

标签:

原文地址:http://www.cnblogs.com/ustc-cui/p/4639370.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!