二叉搜索树

Posted letianpaiai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉搜索树相关的知识,希望对你有一定的参考价值。

 
 1 Position Find(BinTree BST, ElementType X) {
 2     if (!BST)    return NULL;//查找失败
 3     if (X > BST->Data)    return Find(X, BST->Right);//在右子树中继续
 4     else if (X < BST->Data)    return Find(X, BST->Left);
 5     else return BST;//查找成功,则返回当前结点的地址
 6 }
 7 
 8 BinTree Insert(BinTree BST, ElementType X) {
 9     if (!BST) {//若原树为空,则生成并返回一个结点的二叉搜索树
10         BST = malloc(sizeof(struct TNode));
11         BST->Data = X;
12         BST->Left = BST->Right = NULL;
13     }
14     else {
15         if (X < BST->Data) BST->Left = Insert(X, BST->Left);
16         else if (X > BST->Data) BST->Right = Insert(X, BST->Right);
17     }
18     return BST;
19 }
20 
21 BinTree Delete(BinTree BST, ElementType X) {
22     Position t;
23     
24     if (!BST) printf("Not Found
");
25     else if (X < BST->Data) BST->Left = Delete(X, BST->Left);
26     else if (X > BST->Data) BST->Right = Delete(X, BST->Right);
27     else {
28         if (BST->Left && BST->Right) {//找的的结点若有左右两个子结点
29             t = FindMin(BST->Right);//在右子树中找到最小的元素填充删除结点
30             BST->Data = T->Data;
31             BST->Right = Delete(BST->Data, BST->Right);//在删除结点的右子树中删除最小元素
32         }
33         else {
34             t = BST;//找到的结点有一个或者没有子结点
35             if (!BST->Left) BST = BST->Right;
36             else if (!BST->Right) BST = BST->Left;
37             free(t);
38         }
39     }
40     return BST;
41 }
42 
43 Position FindMin(BinTree BST) {
44     if (!BST) return NULL;
45     else if (!BST->Left)    return BST;
46     else return FindMin(BST->Left);
47 }
48 
49 Position FindMax(BinTree BST) {
50     if (BST) 
51         while (BST->Right)    BST = BST->Right;
52     
53     return BST;
54 }
函数Insert将X插入二叉搜索树BST并返回结果树的根结点指针;
函数Delete将X从二叉搜索树BST中删除,并返回结果树的根结点指针;如果X不在树中,则打印一行Not Found并返回原树的根结点指针;
函数Find在二叉搜索树BST中找到X,返回该结点的指针;如果找不到则返回空指针;
函数FindMin返回二叉搜索树BST中最小元结点的指针;
函数FindMax返回二叉搜索树BST中最大元结点的指针。

 

 

以上是关于二叉搜索树的主要内容,如果未能解决你的问题,请参考以下文章

代码题(10)— 二叉搜索树

代码随想录Day20-Leetcode654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树

二叉搜索树(KV模型,二叉搜索树删除节点)

代码随想录算法训练营第14天|530.二叉搜索树的最小绝对差501.二叉搜索树中的众数236.二叉树的最近公共祖先

二叉树之二叉搜索树(BSTree)

c++:二叉搜索树BinarySortTree