首先我创建了两个类,一个是节点类 Node.java,一个是ShiYan7.java。以下附上两个类的代码
Node.java
//定义节点类 public class Node //单链表结点类,T 指定结点的元素类型 { public int data; //数据域,存储数据元素 public Node left; //地址域,引用前驱结点 public Node right; //地址域,引用后继结点 public Node(int data, Node left,Node right) //构造结点,data 指定数据元素,next 指定后继结点 { this.data = data; //T 对象引用赋值 this.left = left; this.right = right; //Node 对象引用赋值 } public Node() { super(); } public String toString() //返回结点数据域的描述字符串 { return Integer.toString(this.data); } public int getData() { return data; } public void setData(int data) { this.data = data; } public Node getLeft() { return left; } public void setLeft(Node left) { this.left = left; } public Node getRight() { return right; } public void setRight(Node right) { this.right = right; } }
ShiYan7.java
import java.util.Queue; //构造二叉判定树 public class ShiYan7 { static int counter = 0; //定义一个静态计数变量 public static Node createBiTree(Node root, int[] a, int i) { if (i < a.length) { //判断是否溢出 root.data = a[i]; //设定 root 的 data 值 if (i == 0) { //判定是否是第一个元素 if (a[0]<a[1]) { Node rchild = new Node(); root.right = createBiTree(rchild, a, ++counter); } if (a[0]>a[1]) { Node lchild = new Node(); //如果小,则是前一个节点的左节点 root.left = createBiTree(lchild, a, ++counter); } }else{ if (counter!=a.length-1 && root.data < a[i+1]) { //排除 i+1 越界的情况 Node rchild = new Node(); root.right = createBiTree(rchild, a, ++counter); } else if(counter!=a.length-1 && root.data >= a[i+1]){ Node lchild = new Node(); //如果小,则是前一个节点的左节点 root.left = createBiTree(lchild, a, ++counter); } } } return root; } // 访问节点 public static void visitTNode(Node node) { System.out.print(node.data + " "); } // 层次遍历 public static void levelTraverse(Node root) { Queue queue = new LinkedList(); queue.offer(root); // 从根节点入队列 while (!queue.isEmpty()) { // 在队列为空前反复迭代 Node bitNode = queue.poll(); // 取出队列首节点 visitTNode(bitNode); if (bitNode.left != null) queue.offer(bitNode.left); // 左孩子入列 if (bitNode.right != null) queue.offer(bitNode.right); // 右孩子入列 } } public static void main(String[] args) { int[] a = {1,2,5,15,10,85,23,4}; Node root = new Node(); root = createBiTree(root, a, counter); levelTraverse(root); } }
上边的即是我的代码,如果有错误,请在下方评论纠正,算法未作优化,但是这个方法构造一棵树还是可以的哈~