假设我有一个数组说
1 5 4 6 8 9 10 22 17 7 9 3
我想从这个数组创建一个二叉搜索树。我需要算法来理解它。
我已阅读其他与BST相关的内容,如inorder traversal
preorder
postorder
,tree walk
,insertion deletion
等
Book未提供如何创建BST。需要帮助
答案 0 :(得分:1)
如果你不关心树的平衡,那很简单:
保证生成二叉搜索树 - 只是不平衡的搜索树。
答案 1 :(得分:0)
首先,您应该为BST选择一个根节点。一旦选择了根节点,考虑到以下事实就很容易构建BST:左子节点小于父节点,所有右子节点都大于父节点。 < / p>
private Node root;
public void insert(int val) {
if (root == null) {
root = new Node(val);
} else {
insertHelper(root, val);
}
}
private void insertHelper(Node node, int val) {
if (val < node.val) {
if (node.left == null) {
node.left = new Node(val);
} else {
insertHelper(node.left, val);
}
} else if (node.val < val) {
if (node.right == null) {
node.right = new Node(val);
} else {
insertHelper(node.right, val);
}
}
}
答案 2 :(得分:0)
如果给定的数组已排序,您可以执行以下操作:
否则,您始终可以在应用此过程之前对数组进行排序
struct node* construct(int arr[], int start, int end)
{
if(start>end)
return;
else if (start==end)
{
/*assuming we have a function newNode(int) which creates a new BST Node*/
node* Node = newNode(arr[start]);
return Node;
}
int mid = (start+end)/2;
node* root = newNode(arr[mid]);
root->left = construct(arr,start,mid-1);
root->right = construct(arr,mid+1,end);
return root;
}
struct node* construct(int arr[], int start, int end)
{
if(start>end)
return;
else if (start==end)
{
/*assuming we have a function newNode(int) which creates a new BST Node*/
node* Node = newNode(arr[start]);
return Node;
}
int mid = (start+end)/2;
node* root = newNode(arr[mid]);
root->left = construct(arr,start,mid-1);
root->right = construct(arr,mid+1,end);
return root;
}