資料結構 二叉搜尋樹 遞迴(C語言)

2021-08-20 10:30:13 字數 2961 閱讀 1626

上篇文章

二叉搜尋樹:

刪除操作的**過於冗長,我們考慮遞迴版本

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...