码迷,mamicode.com
首页 > 其他好文 > 详细

二叉搜索树

时间:2020-06-29 00:32:28      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:左右   tno   max   min   dma   失败   eof   成功   nod   

 
 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\n");
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中最大元结点的指针。

 

 

二叉搜索树

标签:左右   tno   max   min   dma   失败   eof   成功   nod   

原文地址:https://www.cnblogs.com/letianpaiai/p/13205456.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!