(1) 右子樹所有節點關鍵字的值都要大於左子樹中的值;
(2) 一般的情況:key[left[x]] < key[x] < key[right];
(3) 查詢操作最壞情況o(n),平均情況o(lg(n));
(1) 插入操作:struct node * insert(struct node *root, struct node *new);
(2) 查詢某個關鍵字節點:struct node * find(struct node *root, int key);
(3) 查詢最大值節點:struct node * findmax(struct node *root);
(4) 查詢最小值節點:struct node * findmin(struct node *root);
(5) 查詢某個節點的前驅節點:struct node * sucessor(struct node *root, struct node *target);
(6) 查詢某個節點的後繼節點:struct node *decessor(struct node *root, struct node *target);
(7) 刪除操作:struct node * delete(struct node *root, int key);
(8) 遍歷輸出:void printall(struct node *root);
#include #include typedef struct nodesnode;
node *insert(node **root, node *new)
node *p = *root;
while(1)
else if(new->num < p->num && p->left != null)
else
}if(new->num >= p->num)
if(new->num < p->num)
return new;
}node *findmax(node *root)
node *p = root;
while(p->right != null)
return p;
}node *findmin(node *root)
node *p = root;
while(p->left != null)
return p;
}node *find(node* root, int num)
else if(p->num < num)
else
}return null;
}node *sucessor(node *root, node *tnode)
return p;
}node *p1 = null;
p1 = p->parent;
while(p1 != null && p1->left != p)
if(p1 == null)
return p1;
}node *desucessor(node *root, node *tnode)
return p;
}node *p1 = null;
p1 = p->parent;
while(p1 != null && p1->right != p)
if(p1 == null)
return p1;
}node *delete(node *root, node *tnode)
else
tnode->parent = null;
}if(tnode->left == null && tnode->right != null)
else
}if(tnode->left != null && tnode->right == null)
else
}
if(tnode->left != null && tnode->right != null)
else
p->parent = null;
p->right = null;
tnode->num = p->num;
}return tnode;
}void printall(node *root)
printall(root->left);
printf("%d-",root->num);
printall(root->right);
}void main()
}//printf("halalj\n");
printf("max: %d\n", findmax(root)->num);
printf("min: %d\n", findmin(root)->num);
printf("sucessor of 4 is: %d\n", sucessor(root, p)->num);
printf("decessor of 4 is: %d\n", desucessor(root, p)->num);
printf("find(root, 4) is: %d\n", find(root, 4)->num);
printall(root);
printf("\n");
delete(root, p);
printall(root);
}
資料結構與演算法 二叉查詢樹
1.建立bst樹 往bst樹中新增節點 公開的介面函式 param node 需要新增到bst樹的那個節點 public void add treenode node else 隱藏的函式,add方法的具體實現 param parent bst樹 或者子樹 的根節點 param child 要插入b...
《資料結構與演算法 二叉查詢樹》
二叉查詢樹 binary search tree 也被稱作二叉搜尋樹。設x是二叉查詢樹中的任意乙個結點,則x的鍵值大於等於它的左子樹中任意乙個結點的鍵值,小於等於它的右子樹中任意乙個結點的鍵值。1 結點的前驅和後繼 結點的前驅 二叉樹中鍵值小於該結點的最大結點。結點的後繼 二叉樹中鍵值大於該結點的最...
資料結構與演算法 7 二叉查詢樹
一棵二叉查詢樹 bst 是一棵二叉樹,其中每個結點都含有乙個comparable的鍵 以及相關聯的值 且每個結點的鍵都大於其左子樹中的任意結點的鍵而小於右子樹的任意結點的鍵。和鍊錶一樣,我們巢狀定義了乙個私有類來表示二叉查詢樹上的乙個結點。每個結點都含有乙個鍵 乙個值 一條左鏈結 一條右鏈結和乙個結...