Java 我正在尝试创建一个二进制搜索树并打印该树的预排序
我正在尝试创建一个二进制搜索树,其中包含以下元素,顺序如下: 5,85,89,3,2,8,65,92 并希望打印此树的预订单 输出应为:5,3,2,85,8,65,89,82 到目前为止,我得到的是: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
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。然后,您需要验证该订单是否有效(例如,在您的程序中,该订单不是有效的级别订单)。最后,您可以按照给定的顺序构造一个二叉搜索树。你可以在网上浏览这些方法。请注意,可以为给定的顺序构造多个二叉搜索树。前/后/级订单提供唯一的树