二叉樹排序樹

2022-01-16 15:49:09 字數 2780 閱讀 9240

先看乙個需求

給你乙個陣列

(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 若右子樹不空,則右子...