二叉排序樹思路:二叉排序樹的新增
1.1 將第乙個新增的作為根節點了
1.2 比當前遍歷的節點小的 新增到 左邊
1.3 比當前遍歷的節點大的 新增到 右邊
1.4 盡量不新增相同值得到二叉排序樹中,可以在新增的時候 if else 到預設右邊
二叉排序樹的遍歷
2.1 中序遍歷 : 從小到大
二叉排序樹的刪除
3.1 刪除分三種情況; 1. 刪除葉子節點(沒有左右子節點)2. 刪除帶有乙個子節點的 3. 刪除帶有兩個子節點的
3.2 準備
3.2.1 查詢需要被刪除的節點的方法
3.2.2 查詢需要被刪除的節點的父節點的方法 【重點】
3.2.3 查詢刪除節點的右子樹最小的節點。或者查詢左子樹最大節點。之後刪除該最小節點(葉子節點)【刪除帶有兩個子節點時用到】
3.3 如果找到了待刪除的節點, 額外判斷刪除是不是根節點。
("*****===分割線**********==");
bs.delnode
(new
bsnode(2
)); bs.
delnode
(new
bsnode(5
)); bs.
delnode
(new
bsnode(9
)); bs.
delnode
(new
bsnode(12
)); bs.
delnode
(new
bsnode(7
)); bs.
delnode
(new
bsnode(3
)); bs.
delnode
(new
bsnode(10
)); bs.
delnode
(new
bsnode(1
));// bs.delnode(new bsnode(2));
// bs.delnode(new bsnode(5));
// bs.delnode(new bsnode(9));
// bs.delnode(new bsnode(12));
// bs.delnode(new bsnode(1));
// bs.delnode(new bsnode(3));
// bs.delnode(new bsnode(7));
// bs.delnode(new bsnode(10));
bs.infixorder()
;}}class
binarysorttree
else
}/**
* 中序遍歷
*/public
void
infixorder()
root.
infixorder()
;}/** * 刪除具有左右子節點的節點時
* -找出右子樹最小的節點
* @return
*/public bsnode getmininright
(bsnode node)
// 跑去刪除節點的右子樹唄
bsnode rightnode = node.right;
// 起始位置
// 然後一直向左找最小,找到葉子節點
while
(rightnode.left != null)
// 刪除右子樹最小節點
delnode
(rightnode)
;return rightnode;
}/**
* 刪除節點
*/public
void
delnode
(bsnode node)
// 刪除
bsnode targetnode = root.
searchnode
(node);if
(targetnode == null)
if(root.left == null && root.right == null)
// 找父節點
bsnode parent = root.
nodeparent
(node)
;// 找到了刪除的節點、找到了刪除節點的父節點
// 刪除情況
if(targetnode.left == null && targetnode.right == null)
else
if(parent.right == targetnode)
}else
if(targetnode.left != null && targetnode.right != null)
else
else
}else
}else
else
}else}}
}}/** * 節點
*/class
bsnode
@override
public string tostring()
';}/**
* 新增節點
* @param node
*/public
void
add(bsnode node)
this
.left.
add(node);}
elseif(
this
.value < node.value)
this
.right.
add(node);}
}/**
* 中序遍歷
*/public
void
infixorder()
system.out.
println
(this);
if(this
.right != null)
}/**
* 查詢需要刪除的節點
*/public bsnode searchnode
(bsnode node)if(
this
.value == node.value)
elseif(
this
.value < node.value)
return
this
.right.
searchnode
(node);}
else
return
this
.left.
searchnode
(node);}
}/**
* 找到需要唄刪除的節點的父節點
* @param node 需要唄刪除的節點
* @return
*/public bsnode nodeparent
(bsnode node)
// 比較if(
二叉排序樹
在複習資料結構,把這個東西總結一下。這種結構是動態查詢表,這種動態是相對靜態查詢 順序查詢,折半查詢,分塊查詢等 來說的。對於各種靜態鍊錶,要達到查詢複雜度為o logn 必須要求有序 而要使插入刪除複雜度為o 1 必須是鍊錶儲存。動態查詢表就可以同時滿足這兩者。動態查詢表的特點是表結構本身在查詢過...
二叉排序樹
name 二叉排序樹相關操作 author unimen date 2011 10 8 13 14 21 刪除結點比較麻煩,總結如下 4大種情況 1 結點p無右孩子 將該點的左孩子變為其在雙親中的同位孩子 1 p為其雙親的左孩子時將其的左孩子變為雙親的左孩子 2 p為其雙親的右孩子時將其的左孩子變為...
二叉排序樹
include include include include struct tree node void insert node struct tree node int void pre order struct tree node void in order struct tree node ...