二叉搜尋樹(遞迴實現)

2021-09-11 10:06:56 字數 3260 閱讀 6786

#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 ...