先看乙個需求
給你乙個陣列
(7, 3, 10, 12, 5, 1, 9)
,要求能夠高效的完成對陣列的查詢和新增
二叉排序樹介紹
二叉排序樹:
bst: (binary sort(search) tree),
對於二叉排序樹的任何乙個非葉子節點,要求左子節點的值比當前節點的值小,右子節點的值比當前節點的值大。
特別說明:如果有相同的值,可以將該節點放在左子節點或右子節點
比如針對前面的陣列
(7, 3, 10, 12, 5, 1, 9)
,對應的二叉排序樹為:
二叉排序樹建立和遍歷
乙個陣列建立成對應的二叉排序樹,並使用中序遍歷二叉排序樹,比如
: 陣列為
array(7, 3, 10, 12, 5, 1, 9)
,建立成對應的二叉排序樹為
: 二叉排序樹的刪除
二叉排序樹的刪除情況比較複雜,有下面三種情況需要考慮
刪除葉子節點
(比如:
2, 5, 9, 12)
刪除只有一顆子樹的節點
(比如:
1) 刪除有兩顆子樹的節點
. (比如:
7, 3
,10 )
二叉排序樹的**實現
package com.atguigu.chapter18.binarytree
//array(7, 3, 10, 12, 5, 1, 9)
做成乙個二叉排序樹
object binarysorttreedemo
//遍歷二叉排序樹
binarysorttree.infixorder() // 1,3,5,7,9,10,12
//刪除
// binarysorttree.delnode(2)
// binarysorttree.delnode(5)
// binarysorttree.delnode(9)
// binarysorttree.delnode(12)
binarysorttree.delnode(10)
println("
刪除後~~~")
binarysorttree.infixorder()
} }
//定義節點
class node(var value: int) else if (value < this.value) else
} else else
} }
//找某個節點的父節點
def searchparent(value: int): node = else else if (this.right != null && value > this.value) else
} }
//新增方法
def add(node: node): unit =
//如果要插入的節點的值小於當前節點的值
if (node.value < this.value) else
} else else
} }
//中序遍歷
def infixorder(): unit =
//先輸出當前節點值
printf("
節點資訊
value=%d \n", value)
//向右邊遞迴輸出右子樹
if (this.right != null)
} }
//定義我們的二叉排序樹
class binarysorttree
val minvalue = target.value
//刪除最小值對應的節點
delnode(minvalue)
return minvalue
} //
查詢節點
def search(value: int): node = else
} //
查詢父節點的方法
def searchparent(value: int): node = else
} //
刪除節點
def delnode(value: int): unit =
//先看有沒有要刪除節點
var targetnode = search(value)
if (targetnode == null)
//查詢
targetnode
的父節點
var parentnode = searchparent(value)
//1.
先考慮的是葉子節點
if (targetnode.left == null && targetnode.right == null) else
} else if (targetnode.left != null && targetnode.right != null) else else
} else else
} }
} def add(node: node): unit = else
} //
中序遍歷
def infixorder(): unit = else } }
二叉樹,排序二叉樹
說到二叉樹,這可是資料結構裡面的非常重要的一種資料結構,二叉樹是樹的一種,本身具有遞迴性質,所以基於二叉樹的一些演算法很容易用遞迴演算法去實現。作為一種非線性結構,比起線性結構還是相對複雜的,很多人甚至看不懂演算法的意思,不能理解。其實一開始接觸這些東西還是挺暈的,不過你多看幾遍,上機實現可能你就會...
排序二叉樹or搜尋二叉樹or查詢二叉樹
排序二叉樹,搜尋二叉樹,查詢二叉樹都是乙個意思,只是叫法不同而已。下面的文章中我們統稱為排序二叉樹。本文主要是針對高中資訊學,因此其中不涉及到指標,所有需要用指標的地方都直接使用陣列進行模擬。排序二叉樹定義 1 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 2 若右子樹不空,則右子...
排序二叉樹or搜尋二叉樹or查詢二叉樹
排序二叉樹,搜尋二叉樹,查詢二叉樹都是乙個意思,只是叫法不同而已。下面的文章中我們統稱為排序二叉樹。本文主要是針對高中資訊學,因此其中不涉及到指標,所有需要用指標的地方都直接使用陣列進行模擬。排序二叉樹定義 1 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 2 若右子樹不空,則右子...