二叉搜尋樹的實現

2021-10-10 03:37:10 字數 3955 閱讀 8026

前序遍歷:30,15,7,22,17,27,60,45,75

中序遍歷: 7,15,17,22,27,30,45,60,75

後序遍歷:7,17,27,22,15,45,75,60,30

二叉查詢樹的實現:

api設計:

1.節點類:

2.二叉搜尋樹類:

//節點類

public

class

node

}

//k extends comparable讓我們的key具有排序的功能

public

class

binarytree

comparable

,v>

/** * 向樹中插入乙個節點

* @param key 節點的鍵

* @param value 節點的值

*/public

void

put(k key, v value)

/** * 向指定樹x中插入乙個節點

* 1.如果x==null,則建立節點,作為x

* 2.如果x!=null

* 2.1 如果 key < x.key, 則往左子樹插入

* 2.2 如果 key > x.key, 則往右子樹插入

* 2.3 如果 key == x.key, 則將x.value 替換為 value

* @param x 樹x的根節點

* @param key 節點的鍵

* @param value 節點的值

* @return 插入節點後的新樹

*/private node put

(node x, k key, v value)

//2.如果x!=null

int cmp = key.

compareto

((k)x.key);if

(cmp <0)

else

if(cmp >0)

else

return x;

}/**

* 根據key查詢節點的值

* @param key 要查詢的節點的鍵

* @return 返回查詢到的節點的值

*/public v get

(k key)

/** * 從指定的樹x中,找出key對應的值

* 1.如果x==null,則返回null

* 2.如果x!=null

* 2.1 如果 key < x.key, 則往左子樹查詢

* 2.2 如果 key > x.key, 則往右子樹查詢

* 2.3 如果 key == x.key, 則找到,並返回value

* @param x 指定的樹的根節點

* @param key 要查詢的節點的鍵

* @return 查詢到的節點的值,未找到則返回null

*/private v get

(node x, k key)

else

if(cmp >0)

else

}/**

* 刪除樹中指定的key的節點

* @param key 要刪除的節點的key

*/public

void

delete

(k key)

/** * 從指定樹x中刪除指定key的節點

* @param x 指定樹x的根節點

* @param key 要刪除的節點的key

* @return 返回刪除後的新樹

*/private node delete

(node x, k key)

else

if(cmp >0)

else

else

if(x.left == null)

else

if(pre != null) pre.left = null;

//斷開node節點

else x.right = null;

將node節點的左右指標指向x節點的左右子樹

node.left = x.left;

node.right = x.right;

將node節點 代替 原來的x節點

x = node;}}

return x;

}/**

* 獲取樹中節點的個數

* @return 返回節點個數

*/public

intsize()

/** * 獲取二叉搜素樹的最小鍵

* @return

*/public k min()

/** * 查詢樹x的最小節點

* @param x

* @return

*/private node minnode

(node x)

return

minnode

(x.left);}

/** * 獲取二叉搜素樹的最大鍵

* @return

*/public k max()

/** * 查詢樹x的最大節點

* @param x

* @return

*/private node maxnode

(node x)

return

maxnode

(x.right);}

/** * 中序遍歷整個樹

*/public

void

inorder()

/** * 中序遍歷

* @param x 遍歷的樹的根節點

*/private

void

inorder

(node x)

}/**

* 前序遍歷

*/public

void

preorder()

/** * 前序遍歷

* @param x

*/private

void

preorder

(node x)

}/**

* 後序遍歷

*/public

void

afterorder()

/** * 後序遍歷

* @param x

*/private

void

afterorder

(node x)

}/**

* 層次遍歷

*/public

void

levelorder()

/** * 層次遍歷

* @param x

*/private

void

levelorder

(node x)

if(pollnode.right != null)

if(a ==0)

}}/** * 獲取樹的最大高度

* @return

*/public

intmaxheight()

/** * 獲取樹x的高度

* @param x

* @return

*/private

intmaxheight

(node x)

}

二叉搜尋樹 二叉搜尋樹

題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...

二叉搜尋樹的實現

binarysearchtree.h inte ce for the binarysearchtree class.include binarytreenode.h include binarytree1.h if defined afx binarysearchtree h 1cd2ff9d 73...

二叉搜尋樹的實現

includeusing namespace std 二叉搜尋樹左兒子的值比當前節點小,右兒子的數值比當前節點大 struct node 建立樹 node insert node p,int x else return p 查詢 bool find node p,int x else return ...