前序遍歷: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 ...