zoukankan      html  css  js  c++  java
  • 二叉树的实现

    二叉树:

    参考链接: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);

        }

     

    }

  • 相关阅读:
    异步编程系列第04章 编写Async方法
    异步编程系列第03章 自己写异步代码
    异步编程系列第02章 你有什么理由使用Async异步编程
    异步编程系列第01章 Async异步编程简介
    初探asp.net异步编程之await
    Sql Server 覆盖索引
    把cookie以json形式返回,用js来set cookie.(解决手机浏览器未知情况下获取不到cookie)
    redis+cookies实现session机制(解决 手机浏览器不自动回传cookies导致session不可用问题)
    把阅读当作一种人生习惯来培养
    SAS中的剔除空格函数
  • 原文地址:https://www.cnblogs.com/ustc-cui/p/4639370.html
Copyright © 2011-2022 走看看