將被刪結點前驅的值t->data取代被刪結點的值s->data;
if (q != t)
s的左子樹重接 q 的右子樹;
else
s的右子樹重接 q 的左子樹;
free(s);
} return 0;
}int deletebst(bitree t, int key)
}1.二叉排序樹刪除結點並返回刪除結點之後的樹操作:
刪除結點操作比查詢,插入都麻煩,因為刪除了乙個結點,這棵樹可能不滿足二叉排序樹的特點了,所以刪除之前首先應該判斷該結點的型別。
2.如果想要在刪除結點操作後返回刪除結點之後的樹,直接修改完待刪除結點及待刪除結點的左右子樹是不能返回刪除結點之後的樹的,這就需要先找到待刪除結點的雙親,判斷待刪除結點是左孩子還是右孩子,然後在雙親結點的左孩子或右孩子位置續接修改之後的結點。
int delete(bitree t)
else if (t->lchild == null)
else
t->data = s->data;
if (q != t)
q->rchild = s->lchild;
else
q->lchild = s->lchild;
free(s);
} return 0;
} int deletebst(bitree t, int key)
}
二叉排序樹的實現
二叉排序樹是一顆特殊的二叉樹 對於樹上的任意乙個結點,根節點的值一定大於其左子樹上的任意結點的值,一定小於其右子樹上任意結點的數值。所以我們可以插入實現二叉排序樹,思路可以這樣 1 若當前樹為空,則x為根節點 2 如果樹不為空,比較根節點與之大小,若插入值小於根節點,就繼續比較跟節點的左子樹,即最終...
二叉排序樹的實現
二叉排序 搜尋 樹是以關鍵碼為結點的二叉樹,其性質 如果任一結點的左子樹非空,則左子樹的所有結點的關鍵碼都小於根結點的關鍵碼 如果任一結點的右子樹非空,則右子樹的所有結點的關鍵碼都大於根結點的關鍵碼。二叉排序樹的儲存結構如下,typedef struct binsortnode pbinsortno...
二叉排序樹的實現
包括二叉排序樹的增加 遍歷和刪除 include include typedef int mytype 二叉排序樹 typedef struct structtreebtree btree init void addchild btree tree,int num void printtree bt...