如何用java实现二叉树的构建

目录:

1.把一个http://www.68idc.cn/wiki/58.html” target=”_blank”>数组的值赋值给一颗二叉树 2.具体代码

注意:

1. 父节点数组下标从0到 n/2 -1 ,但是遍历时要小于n/2-1,因为最后一个父节点可能没有右孩子,当n/2-1为奇数时才有右孩子,为偶数时只有左孩子。

2. 结点左孩子下标为2n+1,右孩子下标为2n+2。

1.树的构建方法 2.具体代码

package tree;    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  *   * @author ocaicai@yeah.net @date: 2011-5-17  *   */  public class BinTreeTraverse2 {        private int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };      private static List<Node> nodeList = null;        /**      * 内部类:节点      *       * @author ocaicai@yeah.net @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.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) {          BinTreeTraverse2 binTree = new BinTreeTraverse2();          binTree.createBinTree();          // 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);      }    }

输出结果:

先序遍历:  1 2 4 8 9 5 3 6 7   中序遍历:  8 4 9 2 5 1 6 3 7   后序遍历:  8 9 4 5 2 6 7 3 1

以上就是如何用java实现二叉树的构建的详细内容,更多请关注其它相关文章!

带上心灵去旅行,以平和的心态看待一切,

如何用java实现二叉树的构建

相关文章:

你感兴趣的文章:

标签云: