基本操作:
建立bst;
查詢;插入乙個節點;
中序遍歷(將得到遞增序列);
刪除乙個節點;
#include
#include
#include
#pragma warning(disable:4996)
typedef
struct mybst
bst;
bst *
create()
;//建立bst
bst *
insert
(bst *t,
int x)
;//插入乙個節點
bst *
search1
(bst *t,
int x)
;//遞迴查詢
bst *
search2
(bst *t,bst *
*p1,
int x)
;//非遞迴查詢,返回查詢節點和前驅
void
inorder
(bst *t)
;//中序遍歷
bst *
dele
(bst *t,
int x)
;//刪除乙個節點的完全非遞迴實現
bst *
dele1
(bst *t,
int x)
;//刪除乙個節點的半遞迴實現
main()
printf
("中序遍歷結果:\n");
inorder
(t);
printf
("\n");
printf
("請輸入乙個要刪除的數:");
scanf
("%d"
,&x)
; t=
dele
(t,x)
;printf
("中序遍歷結果:\n");
inorder
(t);
printf
("\n");
printf
("請輸入乙個要刪除的數:");
scanf
("%d"
,&x)
; t=
dele1
(t,x)
;printf
("中序遍歷結果:\n");
inorder
(t);
printf
("\n");
}bst *
create()
//建立bst
return t;
}bst *
insert
(bst *t,
int x)
//插入乙個節點
else
if(t->data==x)
return t;
else
if(x > t->data)
else
}bst *
search1
(bst *t,
int x)
//遞迴查詢
bst *
search2
(bst *t, bst *
*p1,
int x)
//非遞迴查詢,返回查詢節點和前驅
else
}return
null
;//如果沒有找到,返回null
}void
inorder
(bst *t)
//中序遍歷
}bst *
dele
(bst *t,
int x)
//刪除乙個節點的完全非遞迴實現
else
//對出度進行討論
//找到之後,替換值
p->data=q->data;
//刪除之
if(q == q1->left)
else
return t;
}else
//出度小於2
else
else}}
}}bst *
dele1
(bst *t,
int x)
//刪除乙個節點的半遞迴實現
else
if(t->data == x)
//找到之後,替換值
t->data=q->data;
//刪除節點
if(q == q1->left)
else
return t;
}else
//至少有一空子樹
}else
if(x>t->data)
else
}
資料結構 八 二叉樹
二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作 左子樹 left subtree 和 右子樹 right subtree 二叉樹遍歷,就是按一定的規則和順序走遍二叉樹的所有結點,使每乙個結點都被訪問一次,而且只被訪問一次。設l d r分別表示遍歷左子樹 訪問根結點和遍歷右子樹,則對一棵二叉樹...
資料結構(八)二叉樹遍歷
二叉樹是一種樹形結構,遍歷就是要讓樹中的所有節點被且僅被訪問一次,即按一定規律排列成乙個線性佇列。二叉 子 樹是一種遞迴定義的結構,包含三個部分 根結點 n 左子樹 l 右子樹 r 根據這三個部分的訪問次序對二叉樹的遍歷進行分類,總共有6種遍歷方案 nlr lnr lrn nrl rnl和lnr。研...
資料結構(八)二叉堆 及排序
以下是我學習二叉堆的總結 include include 時間複雜度 o log n 空間複雜度 o 1 int tree 和 int size 合起來表示裝堆的值的陣列 int rootidx 表示要調整的結點的下標 向下調整的 void adjustdown int tree,int size,...