實驗5 結合二叉樹的二叉排序樹設計

2021-08-13 18:54:05 字數 1990 閱讀 4905

實驗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,...