二叉搜索樹
二叉搜索樹表現出特殊的行爲。一個節點的左子必須具備值小於它的父代值,並且節點的右子節點的值必須大於它的父值。
二叉搜索樹表示
我們將使用節點對象來實現樹,並通過引用連接它們。
基本操作
以下是遵循樹的基本操作。
搜索 − 搜索一棵樹中的元素。
插入 − 插入元素到一棵樹中。
前序遍歷 − 遍歷一棵樹方法。
後序遍歷 − 遍歷樹在序方法。
後序遍歷 − 遍歷樹的後序方法。
節點
限定了具有一些數據,引用其左,右子節點的節點。
struct node {
int data;
struct node *leftChild;
struct node *rightChild;
};
搜索操作
每當一個元素是被搜索。開始從根節點搜索,如果數據小於鍵值,在左子樹中搜索元素,否則搜索元素在右子樹。每一個節點按照同樣的算法。
struct node* search(int data){
struct node *current = root;
printf("Visiting elements: ");
while(current->data != data){
if(current != NULL) {
printf("%d ",current->data);
//go to left tree
if(current->data > data){
current = current->leftChild;
}//else go to right tree
else{
current = current->rightChild;
}
//not found
if(current == NULL){
return NULL;
}
}
}
return current;
}
插入操作
每當一個元素將被插入。首先找到它應有的位置。開始從根節點搜索,如果數據小於鍵值,搜索空位置在左子樹那麼插入數據。否則,搜索空位置在右子樹並插入數據。
void insert(int data){
struct node *tempNode = (struct node*) malloc(sizeof(struct node));
struct node *current;
struct node *parent;
tempNode->data = data;
tempNode->leftChild = NULL;
tempNode->rightChild = NULL;
//if tree is empty
if(root == NULL){
root = tempNode;
}else{
current = root;
parent = NULL;
while(1){
parent = current;
//go to left of the tree
if(data < parent->data){
current = current->leftChild;
//insert to the left
if(current == NULL){
parent->leftChild = tempNode;
return;
}
}//go to right of the tree
else{
current = current->rightChild;
//insert to the right
if(current == NULL){
parent->rightChild = tempNode;
return;
}
}
}
}
}