一棵二叉搜尋樹具有如下特徵:
①節點的左子樹只包含小於當前節點的數
② 節點的右子樹只包含大於當前節點的數
③所有左子樹和右子樹自身必須也是二叉搜尋樹
若輸出二叉搜尋樹的中序遍歷序列,則這個序列是非遞減(非遞增)有序的圖1:節點有:a,b,c,d,e,f,g 葉子結點: d,e,f,g 其中結點a又被稱為根節點。
結點a,b,c分別都有兩個子節點,所以他們的度為2,葉子結點d,e,f,g的度為0。
圖2:只是比圖1多了乙個結點t,他同樣也是葉子結點,因為a多了乙個子節點,所以a結點的度為3,它就不能被稱為二叉樹。
如圖1二叉樹結構,雙分支結點的數量為3,葉子結點有4個,符合性質1。但是圖2不符合該性質。因為它不是二叉樹
。圖1中defg處於第三層,23-1=4個結點,記住這是最多這麼多個結點。圖1二叉樹的高度為3,最多有7個結點。因為圖1的二叉樹有7個結點,那麼類似這種二叉樹就叫做滿二叉樹。二分搜尋:從根節點到某一葉子節點的路徑搜尋過程。其時間複雜度為o(log2n)以下操作以遞迴方式實現:/**
* 節點型別
*/static
class
entry
comparable
>
public
entry
(t data, entry
left, entry
right)
}
/**
* 插入
* @param val
*/public
void
insert
(t val)
private entry
insert
(entry
root, t val)
if(root.data.
compareto
(val)
>0)
else
if(root.data.
compareto
(val)
<0)
return root;
}
/**
* 刪除
* @param val
*/public
void
remove
(t val)
/** * 遞迴刪除的內部操作
** @param root 當前節點
* @param val 需要刪除的節點值
* @return
*/private entry
remove
(entry
root, t val)
if(root.data.
compareto
(val)
>0)
else
if(root.data.
compareto
(val)
<0)
else
//用前驅節點的值覆蓋待刪除節點的值
root.data = pre.data;
//繼續遞迴尋找待刪除節點的前驅節點
root.left =
remove
(root.left, pre.data);}
else
else
if(root.right != null)
else}}
return root;
}
/**
* 查詢
* @param val
* @return
*/public
boolean
query
(t val)
private
boolean
query
(entry
root, t val)
if(root.data.
compareto
(val)
>0)
else
if(root.data.
compareto
(val)
<0)
else
}
/**
* 以root指向的節點為起始節點進行前序遍歷訪問 vlr
* @param root
*/private
void
preorder
(entry
root)
}/**
* 以root指向的節點為起始節點進行中序遍歷訪問 lvr
* @param root
*/private
void
inorder
(entry
root)
inorder
(root.left)
;//l
system.out.
(root.data +
" ")
;//v
inorder
(root.right)
;//r
}/**
* 以root指向的節點為起始節點進行後序遍歷訪問 lrv
* @param root
*/private
void
postorder
(entry
root)
postorder
(root.left)
;//l
postorder
(root.right)
;//r
system.out.
(root.data +
" ")
;//v
}/**
* 遞迴實現層序遍歷
* 乙個levelorder做的是深度遍歷,一層一層列印說的是廣度遍歷,有幾層遍歷幾次
*/public
void
levelorder()
system.out.
println()
;}
資料結構 2 二叉搜尋樹(BST)
二叉搜尋樹 乙個節點的左子節點的關鍵字的值小於這個節點,右子節點的關鍵字的值大於或者等於這個父節點 在查詢過程中,用變數current來儲存正在檢視的節點,引數key是要查詢的值,查詢從root開始,因此開始把current設為根。之後,在while迴圈中,將要查詢的值,key與idata做比較。小...
資料結構 3二叉搜尋樹 BST
結構體node 左結點left 右結點right 資料data 類bst 根結點root 主要功能有 新增 刪除 查詢 遍歷 前序遍歷 中序遍歷 後序遍歷 層序遍歷 深度優先搜尋 廣度優先搜尋 高度計算 時間複雜度 1 新增 時間複雜度為o logn 2 刪除 時間複雜度為o logn 簡單描述一下...
資料結構之 二叉搜尋樹 二叉排序樹 BST樹
二叉搜尋樹簡稱bst樹 二叉搜素樹是二叉樹的一種,陣列這種資料結構也能夠實現對元素的快速查詢,但是對於元素的新增 刪除和更新操作,使用陣列來實現的話,就會存在較高的時間複雜度 o n 級別。對於新增 刪除 查詢操作若是要保持較低的時間複雜度可以採用二叉搜尋樹來實現。二叉搜尋樹又稱二叉排序樹,其節點之...