二叉排序樹

2021-06-27 17:07:46 字數 1104 閱讀 5132

#include

#include

#include

using namespace std;

typedef struct bitnode    /* 結點結構 */

bitnode, *bitree;

void initbst(bitree t)

int searchbst(bitree t, int key, bitree f, bitree &p)

/*  查詢不成功 */

else if(key==t->data)  

/*  查詢成功 */

else if(keydata)

return searchbst(t->lchild, key, t, p);  /*  在左子樹中繼續查詢 */

else  

return searchbst(t->rchild, key, t, p);  /*  在右子樹中繼續查詢 */

}void insertbst(bitree &t, int key) }

int deletebst(bitree t,int key)

}void delete(bitree &p)    /* 從二叉排序樹中刪除結點p,並重接它的左或右子樹。 */

else if(p->lchild==null) /* 只需重接它的右子樹 */

else                       /* 左右子樹均不空 */

p->data=s->data;       /*  s指向被刪結點的直接前驅(將被刪結點前驅的值取代被刪結點的值) */

if(q!=p)

q->rchild=s->lchild; /*  重接q的右子樹 */

else

q->lchild=s->lchild; /*  重接q的左子樹 */

free(s);}}

void printbst(bitree t)

int main ()

deletebst(root,5);

print(root);

//if(searchbst(root,2)) cout<<"查詢成功"

}

二叉排序樹

在複習資料結構,把這個東西總結一下。這種結構是動態查詢表,這種動態是相對靜態查詢 順序查詢,折半查詢,分塊查詢等 來說的。對於各種靜態鍊錶,要達到查詢複雜度為o logn 必須要求有序 而要使插入刪除複雜度為o 1 必須是鍊錶儲存。動態查詢表就可以同時滿足這兩者。動態查詢表的特點是表結構本身在查詢過...

二叉排序樹

name 二叉排序樹相關操作 author unimen date 2011 10 8 13 14 21 刪除結點比較麻煩,總結如下 4大種情況 1 結點p無右孩子 將該點的左孩子變為其在雙親中的同位孩子 1 p為其雙親的左孩子時將其的左孩子變為雙親的左孩子 2 p為其雙親的右孩子時將其的左孩子變為...

二叉排序樹

include include include include struct tree node void insert node struct tree node int void pre order struct tree node void in order struct tree node ...