刪除一棵平衡二叉樹中的節點,有兩種方法
第一種方法:
a.如果被刪除的節點p沒有左子樹,則用p的右孩子代替p即可
b.否則,在p的左子樹中找到關鍵字最大的節點r,將r的右指標指向p的右孩子,用p的左孩子代替p即可
//節點刪除 方法1
bool cbtree::nodedelete(node *&node,int data)
if(num==
1)
if(node->
data
==data)
p->right=node->right;
q=node->left;
*node=*node->left;
}else
delete q;
num--;
return
true;
}else
if(node->
data
>
data)
}return nodedelete(node->left,data);
}else
}return nodedelete(node->right,data);
}}
第二種方法:
a.如果被刪除的節點p沒有左子樹,則用p的右孩子代替p即可
b.否則,在p的左子樹中找到關鍵字最大的節點r,用r節點代替被刪除的節點p,p原來的左右孩子不變,並且用原來r節點的孩子代替原來的r節點。
//節點刪除 方法2
bool cbtree::deletenode(node *&node,int data)
if(num==
1)
if(node->
data
==data)
node->
data
=p->
data;
if(p->left)
else
}else
num--;
return
true;
}else
if(node->
data
>
data)
}return deletenode(node->left,data);
}else
}return deletenode(node->right,data);
}}
二叉排序樹效能分析:
當二叉排序樹是完全二叉樹時,其平均查詢效能最佳為log2n,與有序表的折半查詢效能相同。
當二叉排序樹退化為一棵單支樹時,二叉排序樹的平均查詢效能最差為(n+1)/2,與順序表的平均查詢長度相同。
二叉排序樹刪除節點
description 二叉排序樹的節點 auther eleven create 2020 04 09 20 43 public class node 新增方法 public void add node node if this value node.value else else else 中序...
二叉樹 節點分析
通過問題了解 問題一 某二叉樹中度為2的結點有18個,則該二叉樹中有 性質1 二叉樹的終端結點 葉子結點 數等於雙分支結點數加1.假設二叉樹中終端結點數為n0,單分支結點數為n1,雙分支結點數為n2,二叉樹中總結點數為n,因為二叉樹中所有結點度數均小於或等於2,所以有 n n0 n1 n2 另一方面...
二叉排序樹新增刪除節點
二叉排序樹 可以很快的檢索到具體的資料。什麼是二叉排序樹 讓左子節點的值小於父節點,右子節點的值大於父節點,這樣的二叉樹稱為二叉排序樹。往二叉排序樹中新增節點 首先要看新增節點的父節點是否為空,在判斷新增節點的值和父節點的值的大小關係,如果小,就放在左節點,如果大就放在右節點 新增節點 public...