Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我正在尝试创建一个二进制搜索树并打印该树的预排序_Java_Binary Tree_Binary Search Tree - Fatal编程技术网

Java 我正在尝试创建一个二进制搜索树并打印该树的预排序

Java 我正在尝试创建一个二进制搜索树并打印该树的预排序,java,binary-tree,binary-search-tree,Java,Binary Tree,Binary Search Tree,我正在尝试创建一个二进制搜索树,其中包含以下元素,顺序如下: 5,85,89,3,2,8,65,92 并希望打印此树的预订单 输出应为:5,3,2,85,8,65,89,82 到目前为止,我得到的是: public class BinaryTree { Node root; // Tree Node static class Node { int data; Node left, right; Nod

我正在尝试创建一个二进制搜索树,其中包含以下元素,顺序如下:

5,85,89,3,2,8,65,92

并希望打印此树的预订单

输出应为:5,3,2,85,8,65,89,82

到目前为止,我得到的是:

public class BinaryTree {
     Node root; 

     // Tree Node 
     static class Node { 
         int data; 
         Node left, right; 
         Node(int data) 
         { 
             this.data = data; 
             this.left = null; 
             this.right = null; 
         } 
     } 

     // Function to insert nodes in level order 
     public Node insertLevelOrder(int[] arr, Node root, 
                                                 int i) 
     { 
         // Base case for recursion 
         if (i < arr.length) { 
             Node temp = new Node(arr[i]); 
             root = temp; 

             // insert left child 
             root.left = insertLevelOrder(arr, root.left, 
                                              2 * i + 1); 

             // insert right child 
             root.right = insertLevelOrder(arr, root.right, 
                                                2 * i + 2); 
         } 
         return root; 
     } 

     // Function to print tree nodes in InOrder fashion 

     /* Given a binary tree, print its nodes in preorder*/
     void printPreorder(Node root) 
     { 
         if (root == null) 
             return; 

         /* first print data of node */
         System.out.print(root.data + " "); 

         /* then recur on left subtree */
         printPreorder(root.left); 

         /* now recur on right subtree */
         printPreorder(root.right); 
     } 
     // Driver program to test above function 
     public static void main(String args[]) 
     { 
         BinaryTree t2 = new BinaryTree(); 
         int arr[] = { 5, 85, 89, 3, 2, 8, 65, 92}; 
         t2.root = t2.insertLevelOrder(arr, t2.root, 0); 
         t2.printPreorder(t2.root); 
     } 
    } 
公共类二进制树{
节根;
//树节点
静态类节点{
int数据;
左、右淋巴结;
节点(int数据)
{ 
这个数据=数据;
this.left=null;
this.right=null;
} 
} 
//函数以按级别顺序插入节点
公共节点insertLevelOrder(int[]arr,节点根,
int i)
{ 
//递归的基本情况
如果(i

我得到的输出为585392289865,这是不正确的

为什么你认为前序应该是5,3,2,85,8,65,89,82?创建的二叉树的根是5,5的左/子是85和89,85的左/右子是3和2,89的左/右子是8和65,3的左子是92。您的代码创建了一个简单的二叉树,而不是二叉搜索树。此序列5、85、89、3、2、8、65、92不能是二元搜索树的级别顺序即使是二元搜索树的有效级别顺序,
insertLevelOrder
也不一定会生成有效的二元搜索树。例如,
3,2,1
是一个有效的级别顺序,但您的代码将生成一个根为3、左/右子级为2和1的树,这不是一个搜索树。如何按照用户输入或arrray的顺序创建二元搜索树?首先,您必须知道它的顺序:pre/post/in/level。然后,您需要验证该订单是否有效(例如,在您的程序中,该订单不是有效的级别订单)。最后,您可以按照给定的顺序构造一个二叉搜索树。你可以在网上浏览这些方法。请注意,可以为给定的顺序构造多个二叉搜索树。前/后/级订单提供唯一的树