1 鍊錶
#include<
stdio.h
>
#include
<
malloc.h
>
typedef
struct
node
node;
void
init(node *t)
node
*insert(node
*t ,
intkey)
else
return
t;
//important!
}node
*creat(node *t)
returnt;}
void
inorder(node
*t)
//中序遍歷輸出
}int
main()
2 陣列
#include<
stdio.h
>
#include
<
string
.h>
#define
n 1000
intl[n], r[n], key[n], flag, root;
void
insert(
intindex,
intx)
else
}void
inorder(
intindex)
intmain()
}inorder(root);
return0;
}
二叉排序樹的刪除操作
有3種方式:
#include<
stdio.h
>
#include
<
malloc.h
>
#include
<
iostream
>
using
namespace
::std;
typedef
struct
node
node;
void
init(node *t)
node
*insert(node
*t ,
intkey)
else
return
t;
//important!
}node
*creat(node *t)
returnt;}
void
inorder(node
*t)
//中序遍歷輸出}//
1.完成節點的刪除操作
node
*deletenode1(node *t)
//如果r不是t的左孩子
//將r的左孩子作為r的父親節點prer的右孩子
if(prer
!=r)
////被刪結點t的右子樹作為r的右子樹
r->
rchild =t
->
rchild;
free(t);
returnr;}
//若t沒有左子樹,直接用t的右孩子取代它
else}//
2.完成節點的刪除操作
node
*deletenode2(node *t)
r->
rchild =t
->
rchild;
node *q
=t->
lchild;
free(t);
returnq;}
else}//
3.1.完成節點的刪除操作
//基本上與第一種情況類似,之不過這次不進行節點指標的移動,而是刪
//除「值」
node
*deletenode3(node *t)
t->
data =r
->
data;
if(prer
!=r)
else
free(r);
returnt;}
//若t沒有左子樹,直接用t的右孩子取代它
else}//
遞迴操作,尋找x的合適位置,主要是呼叫deletenode()函式
node
*delete(node *t,
intx)
returnt;}
intmain()
參考:
資料結構之二叉排序樹
二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有節點的值均小於它的根節點的值 2 若右子樹不空,則右子樹上所有節點的值均大於它的根節點的值 3 左 右子樹也分別為二叉排序樹 4 沒有鍵值相等的節點。以下只建立並先序列印出二叉排序樹 include include...
資料結構之二叉排序樹
二叉排序樹 bst binary sort search tree 對於二叉排序樹的任何乙個非葉子節點,要求左子節點的值比當前節點的值小,右子節點的值比當前節點的值大。特別說明 如果有相同的值,可以將該節點放在左子節點或右子節點 比如針對前面的資料 7,3,10,12,5,1,9 對應的二叉排序樹為...
資料結構之二叉排序樹
別名 二叉搜素樹,二叉查詢樹 線性結構的缺點 順序儲存 不排序 查詢困難,只能通過線性查詢乙個乙個找 排序 刪除和插入操作困難 鏈式結構 無論排序還是不排序,查詢都十分麻煩 注 二叉排序樹 bst 可以解決上述的問題 對於乙個二叉樹中的任意乙個非葉子節點,要求左子節點比當前節點小,右子節點比當前節點...