二叉搜尋樹的基本操作

2021-08-20 04:32:01 字數 2704 閱讀 4893

binsearchtree.h

typedef int datatype; 

typedef struct bstreenode

bstnode,*pbstnode;

// 初始化二叉搜尋樹

void initbstree(bstnode** proot);

//生成新節點

pbstnode buynewnode(datatype data);

// 插入值為data的元素

void insertbstree(bstnode** proot, datatype data);

// 刪除值為data的結點

void deletebstree(bstnode** proot, datatype data);

// 在二叉搜尋樹中查詢值為data的結點

bstnode* findbstree(bstnode* proot, datatype data);

// 中序遍歷二叉搜尋樹

void inorder(bstnode* proot);

// 銷毀二叉搜尋樹 --後序遞迴

void destroybstree(bstnode** proot);

binsearchtree.c

#include "binsearchtree.h"

#include #include #include // 初始化二叉搜尋樹

void initbstree(bstnode** proot)

//生成新節點

pbstnode buynewnode(datatype data)

// 非遞迴插入值為data的元素

void insertbstree(bstnode** proot, datatype data)

//找到插入位置,並儲存插入位置的雙親結點

while(pcur)

//插到右邊

else if(pcur->_data _pright ;

} //資料相等

else

return;

} //開始插資料

if(parent->_data >data)

parent->_pleft =buynewnode(data);

if(parent->_data _pright =buynewnode(data);

}// 非遞迴刪除值為data的結點

void deletebstree(bstnode** proot, datatype data)

else

}if(pcur==null)

else

else

}//只有右孩子或者是葉子結點

if(null==pcur->_pleft )

else

}//左右孩子均存在

else

pcur->_data =pdel->_data ;

if(pcur==parent)

parent->_pright =pdel->_pleft ;

else

parent->_pleft =pdel->_pleft ;

} }free(pdel);

return 1;

}// 非遞迴在二叉搜尋樹中查詢值為data的結點

bstnode* findbstree(bstnode* proot, datatype data)

else

pcur=pcur->_pright ;

} printf("沒有找到該節點\n");

return null;

}#if 0

// 遞迴插入值為data的元素

void insertbstree(bstnode** proot, datatype data)

else }

// 遞迴刪除值為data的結點

void deletebstree(bstnode** proot, datatype data)

//如果沒有右子樹或左右子樹都沒有,直接刪

else if(!(*proot)->_pleft)

//如果左右子樹都存在

else

//將代替結點的值交給*proot

(*proot)->_data =pdel->_data ;

//在*proot的右子樹刪除值為pdel的結點

deletebstree(&(*proot)->_pright ,pdel->_data);

}} }

}// 遞迴在二叉搜尋樹中查詢值為data的結點

bstnode* findbstree(bstnode* proot, datatype data)

}#endif

// 中序遍歷二叉搜尋樹

void inorder(bstnode* proot)

}// 銷毀二叉搜尋樹 --後序遞迴

void destroybstree(bstnode** proot)

}void testbinsearchtree()

; int size=sizeof(arr)/sizeof(arr[0]);

pbstnode proot;

initbstree(&proot);

for(i=0;i

test.c

int main()

二叉搜尋樹的基本操作

建立乙個非負二叉搜尋樹 1表空結點 編寫查詢函式,層序遍歷函式,插入函式,刪除函式,查詢最大值最小值函式 輸入該樹和要查詢的值 輸出 如果找到,列印出 x is found 沒找到列印出 not found 列印出層序遍歷序列 刪除最大值和最小值 刪除成功輸出 x is delete 最後再進行一層...

二叉搜尋樹的基本操作

二叉搜尋樹 binary search tree 它或者是一棵空樹,或者是具有下列性質的二叉樹 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左 右子樹也分別為二叉搜尋樹樹。節點設定 typedef int datat...

二叉搜尋樹的基本操作

pragma once typedef int datatype typedef struct bstreenode bstnode include include include bstnode buybstreenode datatype data pnewnode data data pnew...