#include
#include
#include
using
namespace
std;
template
class
bst node(node *node)
};node *root;
int count;
public:
bst()
~bst()
intsize
() bool
isempty
()int
main
() // test remove
// remove elements in random order
int order[n];
for( int i = 0 ; i < n ; i ++ )
order[i] = i;
shuffle( order , n );
for( int i = 0 ; i < n ; i ++ )
if( bst.contain( order[i] ))
return0;}
複製**
public:
void
insert
(key key, value value)
private:
// 向以node為根的二叉搜尋樹中,插入節點(key, value)
// 返回插入新節點後的二叉搜尋樹的根
node* insert
(node *node, key key, value value)
if( key == node->key )
node->value = value; //如果相等,就把頻率加1
else
if( key < node->key )
node->left = insert( node->left , key, value); // 如果x小於節點的值,就繼續在節點的左子樹中插入x
else
// key > node->key
node->right = insert( node->right, key, value); // 如果x大於節點的值,就繼續在節點的右子樹中插入x
return node;
}複製**
bool
contain
(key key)
// 檢視以node為根的二叉搜尋樹中是否包含鍵值為key的節點
bool
contain
(node* node, key key)
複製**
value* search
(key key)
// 在以node為根的二叉搜尋樹中查詢key所對應的value
value* search
(node* node, key key)
複製**
void
preorder
()// 對以node為根的二叉搜尋樹進行前序遍歷
void
preorder
(node* node)
}複製**
void
inorder
()// 對以node為根的二叉搜尋樹進行中序遍歷
void
inorder
(node* node)
}複製**
void
postorder
()// 對以node為根的二叉搜尋樹進行後序遍歷
void
postorder
(node* node)
}複製**
void
levelorder()}
複製**
key minimum
()// 在以node為根的二叉搜尋樹中,返回最小鍵值的節點
node* minimum
(node* node)
複製**
key maximum
()// 在以node為根的二叉搜尋樹中,返回最大鍵值的節點
node* maximum
(node* node)
複製**
void
removemin
()// 刪除掉以node為根的二分搜尋樹中的最小節點
// 返回刪除節點後新的二分搜尋樹的根
node* removemin
(node* node)
node->left = removemin(node->left);
return node;
}複製**
void
removemax
()// 刪除掉以node為根的二分搜尋樹中的最大節點
// 返回刪除節點後新的二分搜尋樹的根
node* removemax
(node* node)
node->right = removemax(node->right);
return node;
}複製**
void
remove
(key key)
// 刪除掉以node為根的二分搜尋樹中鍵值為key的節點
// 返回刪除節點後新的二分搜尋樹的根
node* remove
(node* node, key key)
else
if( key > node->key )
else
if( node->right == null )
// node->left != null && node->right != null
node *successor = new node(minimum(node->right));
count ++;
successor->right = removemin(node->right);
successor->left = node->left;
delete node;
count --;
return successor;
}}複製**
二叉搜尋樹(遞迴 非遞迴)
完整源 在此 1 二叉搜尋樹的概念 二叉搜尋樹又稱二叉排序樹,它或者是一棵空樹,或者是具有以下性質的二叉樹。若它的左子樹不為空,則左子樹上所有節點的值都小於根節點的值 若它的右子樹不為空,則右子樹上所有的節點的值都大於根節點的值 它的左右子樹也分為二叉搜尋樹 此二叉樹的中序遍歷結果為 0,1,2,3...
非遞迴實現搜尋二叉樹
include using namespace std template struct binarysearchtreenode template class binarysearchtree binarysearchtree binarysearchtree bstree bsnode opera...
不同的二叉搜尋樹(遞迴實現)
給定乙個整數 n,求以 1 n 為節點組成的二叉搜尋樹有多少種?示例 輸入 3 輸出 5 解釋 給定 n 3,一共有 5 種不同結構的二叉搜尋樹 1 遞迴問題切記一定不要跳入遞迴,只從巨集觀上考慮問題 2 求n個節點的所有二叉搜尋樹的數量,只需要將以1 2 n為根節點的所有二叉搜尋樹的數量相加 3 ...