實驗5 結合二叉樹的二叉排序樹設計
【實驗內容】
二叉排序樹採用二叉鍊錶儲存。寫乙個演算法,刪除結點值是x的結點。要求刪除該結點後,此樹仍然是一棵二叉排序樹,並且高度沒有增長(注:可不考慮被刪除的結點是根的情況)。
【實驗目的】
1、了解二叉排序樹的定義,並結合二叉樹的資料結構;
2、掌握二叉排序樹的排序方法。
【實驗步驟與要求】
1、了解二叉排序樹的定義,並結合二叉樹的資料結構;
2、掌握二叉排序樹的排序方法。
**:#include#include#includetypedef struct node
node;
node* build(int data)//建立乙個頭結點
node* insert(node *p,int data)//插入乙個資料
if(p->data>data)//插入的值比當前節點的值更小,遍歷左子樹
else if(p->datarchild)
insert(p->rchild,data);
else
p->rchild=insert(p->rchild,data);
}return null;//說明書中已有相同的值返回null
}void bianli(node *p)//前序遍歷樹
}node* find(node *p,int data)//查詢資料為data節點的父節點的位址
else if(p->rchild&&p->rchild->data==data)//同樣處理右子樹
else//當該節點左右子樹的值都與目標值不相等,繼續遞迴遍歷
return temp;
}}node* delet(node *head,int data)//刪除乙個值為data的節點
if(head->data==data)//特殊處理要刪除的為頭結點情況
else if(head->lchild&&head->rchild==null)//該樹只存在左子樹
else if(head->rchild&&head->lchild==null)//該樹只存在右子樹
else//該樹左右子樹都存在,就取左子樹中的最大值作為當前頭結點,並刪掉原來位置的節點
if(p==head->lchild)//如果找到的值就是左子樹中的根節點,說明左子樹根節點沒有右子樹,要特殊處理直接與他下乙個節點相連
else//否則就將找到的最大值節點的左子樹移到當前節點的右子樹位置
}return head;
}nparent=find(head,data);//要刪除的值不為頭結點的情況,查詢要刪除值的父節點位址
if(nparent==null)//找不到節點
int tag;
if(nparent->lchild&&nparent->lchild->data==data)//判斷該節點為父節點的左兒子還是右兒子
else
if(d->lchild==null&&d->rchild==null)//假如要刪除的節點為葉子節點,根據是父親節點的左兒子還是右兒子直接刪掉
else if(d->lchild&&d->rchild==null)//假如要刪除的節點只有左兒子,那麼將該節點父節點更新為該節點的左兒子
else
}else if(d->rchild&&d->lchild==null)//假如要刪除的節點只有右兒子,那麼將該節點父節點的右兒子更新為該節點的右兒子
else
}else//要刪除的節點左右兒子都有
if(p==d->lchild)//如果找到的值就是左子樹中的根節點,說明左子樹根節點沒有右子樹,要特殊處理直接與他下乙個節點相連
else//否則就將找到的最大值節點的左子樹移到當前節點的右子樹位置
}return head;//返回head,作用為當更新樹的根節點時更新
}int main()
{ node *head;
int n,x,i,m;
scanf("%d",&n);
for(i=0;i
二叉樹,完全二叉樹,滿二叉樹,二叉排序樹
二叉樹 二叉樹是每個節點最多有兩個子樹的樹結構 是n n 0 個結點的有限集合,它或者是空樹 n 0 或者是由乙個根結點及兩顆互不相交的 分別稱為左子樹和右子樹的二叉樹所組成。完全二叉樹 除最後一層外,每一層上的結點數均達到最大值 在最後一層上只缺少右邊的若干結點 樹中所含的n個節點和滿二叉樹中編號...
實驗 二叉排序樹
一 實驗目的 1.掌握二叉樹邏輯結構 2.掌握利用c c 程式語言實現資料結構的程式設計方法 3.通過上機時間加強利用資料結構解決實際應用問題的能力 二 實驗相關知識 1.二叉樹的二叉鍊錶儲存結構的實現 2.二叉樹排序樹的定義 3.二叉排序樹的插入 構建 刪除 4.二叉排序樹的中序遍歷。三 實驗內容...
二叉樹(四) 二叉排序樹
二叉排序樹或者非空二叉樹,或者為具有以下性質的二叉樹 1 若根結點的左子樹不空,則左子樹上所有結點的值都小於根結點的值 2 若根結點的右子樹不空,則右子樹上所有結點的值都大於或者等於根結點的值 每一棵子樹分別也是二叉排序樹。上述定義為遞迴定義 如下圖 該二叉樹的中序序列如下 10,30,35,38,...