Binary Search Tree(二叉查詢樹)

2021-09-12 11:10:11 字數 2260 閱讀 9319

也被成為 ordered binary tree(有序二叉樹)或 sorted binary tree(排序二叉樹),有如下性質:

若任意節點的左子樹不空,則左子樹上所有節點的值均小於它的根節點的值;

若任意節點的右子樹不空,則右子樹上所有節點的值均大於它的根節點的值;

任意節點的左、右子樹也分別為二叉查詢樹;

沒有鍵值相等的節點。

資料:查詢快 o(1),插入慢o(n) 需要移動插入點之後的所有資料。

鍊錶:查詢慢 o(n) ,插入快 o(1) 每次查詢都需要遍歷一遍

於是作為平衡的binary search tree出現了

查詢 平均o(logn) 最差o(n)

插入 平均o(logn) 最差o(n)

首先定義node,最少包含3個屬性,左節點,右節點和值。

public

class

node

}

按照 root ー> left subtree ー> right subtree 的順序訪問節點。

遞迴實現

public

void

printpreorder

(node n)

system.out.

println

(n.data);if

(n.left != null)

if(n.right != null)

}

非遞迴實現
public

void

printpreorderwithoutrecursion

(node n)

stack

s =newstack

(); node current = n;

while

(current != null ||

!s.isempty()

)if(!s.

empty()

)}}

按照 left subtree ー> root ー> right subtree 的順序訪問節點。

遞迴實現

public

void

printmidorder

(node n)

if(n.left != null)

system.out.

println

(n.data);if

(n.right != null)

}

非遞迴實現
public

void

printmidorderwithoutrecursion

(node n)

stack

s =newstack

(); node current = n;

while

(current != null ||

!s.isempty()

)if(!s.

empty()

)}}

按照 left subtree ー> right subtree ー> root 的順序訪問節點。

遞迴實現

public

void

printaftorder

(node n)

if(n.left != null)

if(n.right != null)

system.out.

println

(n.data)

;}

非遞迴實現

後序遍歷的非遞迴實現方法有好幾種,其中的乙個思路是在node中增加乙個標誌位來記錄是否是第一次訪問,如果是第一次訪問就再次入棧並查詢right subtree,只有當right subtree也查詢完成之後第二次入棧的時候再列印。

public

class

node

}

public

void

printaftorderwithoutrecursion_1

(node n)

stack

s =newstack

(); node current = n;

while

(current != null ||

!s.isempty()

)if(!s.

empty()

)else}}

}

二叉搜尋樹 Binary Search Tree

完整 二叉搜尋樹是這樣一種二叉樹,對於乙個結點x,如果它的左子樹的結點值都小於x,它的右子樹的結點值都大於x。並且他的左子樹和右子樹也滿足此特性的二叉樹。二叉搜尋樹的中序遍歷可得到資料的有序序列。bst結點的前驅是指該結點的前乙個結點,即指向該結點的結點。bst結點的後繼是指該結點的右子樹中值最接近...

二叉查詢樹 Binary Search Tree

本帖部分文字和來自於 但所有 均為原創 二叉查詢樹 英語 binary search tree 也稱二叉搜尋樹 有序二叉樹 英語 ordered binary tree 排序二叉樹 英語 sorted binary tree 是指一棵空樹或者具有下列性質的二叉樹 二叉查詢樹相比於其他資料結構的優勢在...

二叉查詢樹 BinarySearchTree

一 定義tree介面public inte ce treeextends iterable二 實現抽象便利類abstracttree public abstract class abstracttreeimplements tree override public void preorder ove...