C語言二叉排序(搜尋)樹例項

2022-09-29 11:54:11 字數 2725 閱讀 4378

/**1.實現了遞迴 非遞迴插入(建立)二叉排序(搜尋)樹;

分別對應insert_binsnode(tbinsnode* t,int k),nonrecursion_insert_binsnode(tbinsnode* t,int k);

2.實現了遞迴 非遞迴查詢 二叉排序(搜尋)樹 ;

分別對應find_binsnode(tbinsnode *t,int s),nonrecursion_find_binsnode(tbinsnode *t,int s);

3. 實現了非遞迴刪除 二叉排序(搜尋)樹;

分別對應delete_binsnode();

4. 實現了遞迴先序、中序、後序遍歷二叉排序(搜尋)樹;

分別對應pre_print_binsnode(tbinsnode t),in_print_binsnode(tbinsnode t),post_print_binsnode(tbinsnode t);

*/#include

#include

typedef struct binstreenodeb程式設計客棧insnode,*tbinsnode;

int empty_tree(tbinsnode t)else

}/*---------------------非遞迴方法 二叉排序樹的刪除-----------------*/

void delete_binsnode(tbinsnode *t,int del)

//如果二叉排序樹不為空,先找到即將刪除的元素del.這裡再次實現一遍查詢,當然也可以修改一下find類的函式

while(cur && cur->num!=del)else

} if(!cur)

if(cur->num==del)

//如果找到待刪除的結點,立刻判斷該結點有無左子樹

//情況一:待刪除結點無左子樹

if(!cur->lchild)

if(pre->lchild && pre->lchild->num==del)

if(pre->rchild && pre->rchild->num==del)

} //情況二:待刪除的結點有左子樹。

if(cur->lchild)

if(pre->rchild && pre->rchild->num==del)

} //情況2.2:該左子樹有右子樹

if(lt->rchild)

www.cppcns.com cur->num=lt->num;

rblast->rchild=lt->lchild;

free(lt);

return;

} }}

/*--------------------遞迴方法 查詢 二叉排序樹-------------------*/

void find_binsnode(tbinsnode t,int s)

if(s>t->num)else

} /*-------------------非遞迴方法 查詢二叉排序樹--------------------*/

void nonrecursion_find_binsnode(tbinsnode t,int s)

while(t && s!=t->num )else

} if(!t)

if(s==t->num)

} /*-----------------遞迴方法 建立/插入 二叉排序樹------------------*/

void insert_binsnode(tbinsnode *t,int k)elseelse

} }/*----------------------先序遍歷二叉排序樹----------------------------------*/

void pre_print_binsnode(tbinsnode t)

}/*-----------------------中序遍歷二叉排序樹-----------------------------------*/

void in_print_binsnode(tbinsnode t)

}/*-----------------------後序遍歷二叉排序樹-----------------------------------*/

void post_print_binsnode(tbinsnode t)

}/*---------------------非遞迴 建立/插入 二叉排序樹---------------------------*/

void nonrecursion_insert_binsnode(tbinsnode *t,int k)elseelse

}p=(tbinsnode)malloc(sizeof(binsnode));

p->num=k;

p->lchild=p->rchild=null;

if(k>cur->num)

if(knum)

}} int main(void)

// scanf("%d",&s);

// find_binsnode(t,s);

// nonrecursion_find_binsnode(t,s);

pre_print_binsnode(t);

scanf("%d",&del);

delete_binsnode(&t,del);

pre_print_binsnode(t);

return 0;

} 本文標題: c語言二叉排序(搜尋)樹例項

本文位址:

二叉搜尋樹(C語言)

學習二叉搜尋樹的過程中,對於刪除操作中的兩個節點都存在的情況進行 編寫時,出現了疑惑,所以我著重講解一下刪除操作 首先進行資料的宣告 include includetypedef int data type 宣告元素型別 typedef struct bst nodebst t,bst p 傳入根節...

C語言 二叉搜尋樹

實現過程 二叉查詢樹 binary search tree 又 二叉搜尋樹,二叉排序樹 它或者是一棵空樹,或者是具有下列性質的二叉樹 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左 右子樹也分別為二叉排序樹。簡而言之...

C語言二叉搜尋樹

7 4 是否同一棵二叉搜尋樹 25 分 給定乙個插入序列就可以唯一確定一棵二叉搜尋樹。然而,一棵給定的二叉搜尋樹卻可以由多種不同的插入序列得到。例如分別按照序列和插入初始為空的二叉搜尋樹,都得到一樣的結果。於是對於輸入的各種插入序列,你需要判斷它們是否能生成一樣的二叉搜尋樹。輸入包含若干組測試資料。...