上篇文章
二叉搜尋樹:
刪除操作的**過於冗長,我們考慮遞迴版本
1.binarysearchtreerecursion.h
#pragma once
#include
#include
#include
#include
typedef
int datatype;
typedef
struct bstreenode
bstnode, *pbstn;
void initbstreercs(pbstn* proot);
pbstn findbstreercs(pbstn proot, datatype data);
void insertbstreercs(pbstn* proot, datatype data);
void deletebstreercs(pbstn* proot, datatype data);
void inorderrcs(pbstn proot);
void destroybstreercs(pbstn* proot);
2.binarysearchtreerecursion.c
#include
"binarysearchtreerecursion.h"
pbstn buynewnodercs(data)
else
}void initbstreercs(pbstn* proot)
pbstn findbstreercs(pbstn proot, datatype data)
if (proot->_data ==
data)
else
if (data
_data)
else
}void insertbstreercs(pbstn* proot, datatype data)
if ((*proot)->_data ==
data)
else
if (data
< (*proot)->_data)
else
}// 遞迴版本的刪除只有刪除根節點這一種情況
void deletebstreercs(pbstn* proot, datatype data)
if (data
== (*proot)->_data)
else
if (null
== (*proot)->_pright)
else
(*proot)->_data = pdel->_data;
deletebstreercs(&((*proot)->_pright), pdel->_data);}}
else
if (data
< (*proot)->_data)
else
}void inorderrcs(pbstn proot)
inorderrcs(proot->_pleft);
printf("%d ", proot->_data);
inorderrcs(proot->_pright);
}void destroybstreercs(pbstn* proot)
destroybstreercs(&(*proot)->_pleft);
destroybstreercs(&(*proot)->_pright);
free(*proot);
(*proot) =
null;
}
3.test.c
#include "binarysearchtreerecursion.h"
void testbinarysearchtree()
; int i = 0;
int size = sizeof(arr) / sizeof(arr[0]);
pbstn ret_find = null;
initbstreercs(&root);
for (i = 0; i < size; i++)
printf("inorderrcs:");
inorderrcs(root);
printf("\n");
insertbstreercs(&root, 10);
printf("inorderrcs:");
inorderrcs(root);
printf("\n");
ret_find = findbstreercs(root, 10);
if (ret_find == null)
else
deletebstreercs(&root, 2);
printf("inorderrcs:");
inorderrcs(root);
printf("\n");
deletebstreercs(&root, 1);
printf("inorderrcs:");
inorderrcs(root);
printf("\n");
deletebstreercs(&root, 5);
printf("inorderrcs:");
inorderrcs(root);
printf("\n");
deletebstreercs(&root, 3);
printf("inorderrcs:");
inorderrcs(root);
printf("\n");
destroybstreercs(&root);
}int main()
測試結果:
如有不正,還請指出,有勞!
資料結構 二叉搜尋樹(C語言)
關於資料結構二叉樹的概念及操作可參看部落格 二叉搜尋樹又稱為二叉排序樹,它或者是一顆空樹,或者時具有以下性質的二叉樹 最難的部分還是要數二叉搜尋樹的刪除操作 binarysearchtree.h binarysearchtree.h pragma once include include inclu...
二叉搜尋樹c 資料結構二叉搜尋樹
在n個動態的整數中搜尋某個整數?檢視其是否存在 假設使用動態陣列存放元素,從第 0 個位置開始遍歷搜尋,平均時間複雜度 o n 如果維護乙個有序的動態陣列,使用二分搜尋,最壞時間複雜度 o logn 但是新增 刪除的平均時間複雜度是 o n 針對這個需求,有沒有更好的方案?今天我們主要講的就是二叉搜...
資料結構(二叉搜尋樹)
二叉搜尋樹是一種可以高效完成以下操作的樹型的資料結構 插入乙個值 查詢是否含有某個值 刪除某個值 它儲存節點的資料資訊時,遵循以下規則,左子樹的值 根節點值 右子樹的值 下面是基本的二叉搜尋樹的實現 include include include includeusing namespace std...