『壹』 二叉搜索樹怎麼刪除節點 如圖 如果要把節點8刪除,要怎麼刪

通常不會從二叉搜索樹中刪除某個結點。即使要刪除,刪除的方法也不是唯一的。當被刪除的結點p是葉子結點時無需多言;當不是葉子結點時,介紹其中一種方法:
若p有左孩子,遞歸查找p的左子樹的最右結點,用其替代p。若該節點存在左孩子,將左孩子頂替到該節點位置上。
若p沒有左孩子,直接用右孩子代替該節點。
要刪除圖中的8,首先遞歸查找其左子樹的最右結點,為7。將7頂替到8的位置上,並刪除結點8。結點7沒有左孩子,操作完成。

『貳』 查找二叉樹怎麼刪除節點

怎麼又是你,我給你的代碼沒認真看么?那是二叉樹函數庫,一並具全。
searchtree delete(int
x,searchtree t)刪除指定結點函數。你看著我給你的代碼有這個東西沒有。調用的時候delete(結點,樹指針);就這樣。二叉樹和c語言都很復習,要認真研究。還有二叉樹不就是二叉查找樹嗎?(多了查找功能罷了)。我懷疑我給你的代碼都沒看完,這個不能心急,我研究二叉樹都花了幾天時間,沒有耐性不行的。

『叄』 二叉排序樹的插入刪除

與次優二叉樹相對,二叉排序樹是一種動態樹表。其特點是:樹的結構通常不是一次生成的,而是在查找過程中,當樹中不存在關鍵字等於給定值的節點時再進行插入。新插入的結點一定是一個新添加的葉子節點,並且是查找不成功時查找路徑上訪問的最後一個結點的左孩子或右孩子結點。

『肆』 二叉排序樹的節點刪除

p的雙親節點還是指向的p的地址,這沒錯,
因為p=p->lchild是把p指向p的左孩子的地址,所以p的雙親結點指向的p就是指到了刪除前p的左孩子結點,然後用free(q)釋放了p的內存,就完成了重接左子樹

『伍』 二叉查找樹的查找、插入與刪除操作。

#include "BiSearchTree.h"

void main(void){
BiSearchTree<int>searchTree;
int a[]={18,14,24,5,16,20,38,7,30,10,35},n=11;
for(int i=0;i<n;i++)
searchTree.Insert(a[i]);
searchTree.PrintVTree();
cout<<endl;
cout<<"非遞歸前序遍歷:"<<endl;
searchTree.PreOrder();
cout<<endl;
cout<<"非遞歸後序遍歷:"<<endl;
searchTree.PostOrder();
cout<<endl;
cout<<" 刪除24";
searchTree.Delete(a[2]);
searchTree.PrintVTree();
cout<<endl;
}
//BiSearchTree.h
#include "LinStack.h"
#include<math.h>

struct Info{
int xIndent;
int yLevel;
};
template<typename T>class BiSearchTree{
private:
BiTreeNode<T> *root;
void PreOrder(BiTreeNode<T> *&t);
void InOrder(BiTreeNode<T> *&t);
void PostOrder(BiTreeNode<T> *&t);
void Insert(BiTreeNode<T> *&ptr,const T &item);
void Delete(BiTreeNode<T> *&ptr,const T &item);
void PrintVTree(BiTreeNode<T> *&t);
public:
BiSearchTree():root(NULL){};
~BiSearchTree(){};

void PrintVTree(){PrintVTree(root);}
BiTreeNode<T> *&GetRoot(){return root;}
void PreOrder(){ PreOrder(root);}
void PostOrder(){ PostOrder(root);}
BiTreeNode<T> *&Find(const T &item);
void Insert(const T &item){
Insert(GetRoot(),item);}
void Delete(const T &item){
Delete(GetRoot(),item);}
};
template<typename T>void BiSearchTree<T>::PrintVTree(BiTreeNode<T> *&t){
int screenWidth=64;
int dataWidth=2;
LinQueue<Info> QI;
LinQueue<BiTreeNode<T>*> Q;
BiTreeNode<T> *p;
Info s,s1,s2;
int offset,level=-1,len,i;
Q.Insert(t);
s.xIndent=screenWidth/dataWidth;
s.yLevel=0;
QI.Insert(s);
while(!Q.Empty()&&!QI.Empty())
{
s2=s;
p=Q.Delete();
s=QI.Delete();
if(s.yLevel!=level){
cout<<"\n第"<<s.yLevel<<"層";
level=s.yLevel;

提供網站http://www.bc-cn.net/bbs/Article/20054/16/15813.html
如果有不會的可以問我,小弟對這個略知一,二.

『陸』 關於搜索二叉樹刪除操作的問題

建議你重新學習匯編語言,用單步調試的方法進行調試你就明白了,眼過前行不如手擼一行

『柒』 java,二叉搜索樹中的刪除節點

這里完全可以。

習慣上應該是上面的寫法,要在successor結點更改之前就進行賦值,在有些情況下能夠防止出現錯誤賦值,或者是,節省演算法的復雜度。

不過,顯然這里沒什麼影響。

『捌』 二叉排序樹 刪除結點 定義

二叉排序樹節點的刪除有2種方法
你上面我沒有看懂你的
但是我講的你肯定能聽懂
假設要刪除的是節點p,pl為p的左子樹pr為p的右子樹
a:前驅後繼法
首先中序遍歷二叉樹得到一個序列你的例子是51 20 48 89 112 56 得到89的後繼是112,前驅是48.
這下就證明書上的沒有錯了。這里我用後繼的方法用112替代根節點,此時原來根節點的左子樹仍要滿足二叉排序樹的性質,所以要接在112的後面。
總的來說就是刪除一個節點p,用前驅(後繼)取代p,而前驅(後繼)的右子樹就取代p的位置(!!此時後繼沒有左子樹,因為假如後繼有左子樹的話那麼後繼就是p的左子樹了啊,而不是p要是存在左右子樹的話,那麼後繼的兄弟右子樹就不要變動了)p的子樹不變位置,依然接在新的節點後面,作為其左右子樹。
b:左右子樹替代法
刪除節點p,我這里用左子樹法,首先用48取代89,那麼89的右子樹(包含112 56)就接在新的節點48後面作為其右子樹,依然滿足二叉排序樹的特徵。
總的來說,刪除節點p,用它的右(左)子樹替代節點p,然後將p的左(右)子樹作為p左(右)子樹的接在右(左)子樹的最左(右)節點後面作為左(右)子樹即可。你這個例子用右子樹替代的話,最左節點是56。
我是個學生,以後多多交流,我的QQ是314251898
謝謝。

『玖』 二叉排序樹的刪除一個節點的為碼演算法

bool Delete_Node(Tree& T,char key);刪除二叉樹中值為key的節點如果樹中不含有對應節點返回fals否則返回true;演算法如下
{
首先在循環中查找到值為key的節點,如果找不到,返回false,找到則跳出循環
如果找到的是根節點,則直接把根的左子樹放到右子樹最左邊
根節點的值為改為右子樹即可
如果不是根節點,首先找到這個節點對應右子樹的最左節點,然後把左子樹接過去,接下來把這個節點的根節點的左子樹或是右子樹指向這個節點的右子樹
}

『拾』 java 二叉查找樹刪除

這里完全可以。

習慣上應該是上面的寫法,要在successor結點更改之前就進行賦值,在有些情況下能夠防止出現錯誤賦值,或者是,節省演算法的復雜度。

不過,顯然這里沒什麼影響。