美圖欣賞 | 設為首頁 | 加入收藏 | 網站地圖

當前位置:緬甸新錦江官網:www.xjj7.com-電腦中國 > 數據庫 > 其他 >

二叉搜索樹的插入和刪除

2017-02-14 09:07|來源:未知 |作者:dnzg |點擊:

二叉搜索樹的插入和刪除。

\
\\\\\\\\\
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
typedef struct TreeNode *BinTree; 
typedef BinTree Position;  
struct TreeNode{ 
    ElementType Data; 
    BinTree Left; 
    BinTree Right;  
};  
BinTree BST;
BinTree Insert(ElementType X,BinTree BST)//二叉搜索樹的插入算法
{
    if(!BST){//若原樹為空,生成并返回一個結點的二叉搜索樹
        BST=malloc(sizeof(struct TreeNode));
        BST->Data=X;
        BST->Left=BST->Right=NULL;   
    }else//開始找要插入元素的位置
        if(X<bst->Data)
            BST->Left=Insert(X,BST->Left);//遞歸插入左子樹
        else if(X>BST->Data)
            BST->Right=Insert(X,BST->Right);//遞歸插入右子樹 
        //else X已經存在,什么都不做
    return BST;
}
BinTree Delete(ElementType X,BinTree BST)//二叉搜索樹的刪除算法
{
    Position Tmp;
    if(!BST) printf("要刪除的元素未找到");
    else if(X<bst->Data)
            BST->Left=Delete(X,BST->Left);//左子樹遞歸刪除
    else if(X>BST->Data)
            BST->Right=Delete(X,BST->Right);//右子樹遞歸刪除
    else//找到要刪除的結點
         if(BST->Left&&BST->Right){//被刪除結點有左右兩個結點
            Tmp=FindMin(BST->Right);
                    //在右子樹中找最小的元素填充刪除結點
            BST->Data=Tmp->Data;
            BST->Right=Delete(BST->Data,BST->Right);
                    //在刪除結點的右子樹中刪除最小元素
         }else{//被刪除結點有一個或無子結點
            Tmp=BST;
            if(!BST->Left)//有右孩子或無子結點
                BST=BST->Right;
            else if(!BST->Right)//有左孩子或無子結點
                BST=BST->Left;
            free(Tmp);
         }
    return BST; 
} </bst-></bst->
 
(責任編輯:dnzg)
安卓手机安全赚钱软件哪个好用 股票趋势指标公式 中成股份股票 中天科技股票论坛 山东广东11选五免费计划 黑龙江好运11选5 pk10预测最准的网站 黑龙江36选7官网 金鹰股份股票行情 辽宁体彩11选5计算方法 极速赛车app官方版