假設我有一個數組說如何創建二分查找樹?
1 5 4 6 8 9 10 22 17 7 9 3
我想從這個數組創建一個二叉搜索樹。我需要算法來理解這一點。
我已閱讀有關BST像inorder traversal
preorder
postorder
,tree walk
,剩下其他的事情insertion deletion
等
書沒有提供如何創建BST。需要幫助這裏
假設我有一個數組說如何創建二分查找樹?
1 5 4 6 8 9 10 22 17 7 9 3
我想從這個數組創建一個二叉搜索樹。我需要算法來理解這一點。
我已閱讀有關BST像inorder traversal
preorder
postorder
,tree walk
,剩下其他的事情insertion deletion
等
書沒有提供如何創建BST。需要幫助這裏
首先,你應該爲你的BST選擇一個根節點。一旦你選擇了一個根節點,考慮到以下事實構建BST已經很簡單:左邊的子節點小於父節點,所有正確的子節點大於父節點。
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);
}
}
}
如何選擇根節點。 – Nitesh
這取決於你。你可以根據情況選擇你想要的任何根節點。當然,樹的結構取決於你選擇的根節點。 –
如果給定的數組進行排序,你可以做到以下幾點:
否則,你總是可以在陣列應用程序
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;
}
嘗試平衡二叉樹,http://en.wikipedia.org/wiki/Self-balancing_binary_search_tree之前排序。 – aquemini
我想你是在學習樹的開始,現在不在乎平衡。 –
@GökhanÇoban:對。剛開始學習樹木。書中有些東西不清楚。所以在這裏張貼 – Nitesh