数据结构-树5-二叉搜索树
生活随笔
收集整理的這篇文章主要介紹了
数据结构-树5-二叉搜索树
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include<iostream>
#include<string>using namespace std;
//構建二叉樹的結構體
template< typename T>
struct binaryTreeNode
{T element; //數據binaryTreeNode<T>* leftChild; //左子樹指針binaryTreeNode<T>* rightChild; //右子樹指針//C C++ 區別//無參數構造函數-->用來給數據初始化binaryTreeNode(){leftChild = rightChild = NULL;}//傳入數據域//C++初始化參數列表(const數據域必須采用這種方式)binaryTreeNode(const T& element) :element(element){leftChild = rightChild = NULL;}//C++類中const成員: const數據成員 const成員函數binaryTreeNode(const T& element, binaryTreeNode<T> * leftChild, binaryTreeNode<T>* rightChild) :element(element){//c++ thisthis->leftChild = leftChild;this->rightChild = rightChild;}};template< typename K, typename E>
class binarySearchTree {
public:binarySearchTree();//萬金油函數:判斷是否為空+size大小+打印數據int size() const; //const 成員函數里面不能修改基本數據成員bool empty() const;void printNode(binaryTreeNode<pair<const K, E>>* Node);void visit(binaryTreeNode<pair<const K, E>>* Node){cout << Node->element.first << ":" << Node->element.second << endl;}void printTree();//插入結點:插入的pair類型的結構體數據void insert(const pair<const K, E> &thePair);//刪除結點:根據關鍵字刪除//void erase(const K& theKey);//查找結點//pair<const &K, E>* find(const K& theKey);
protected: //pair<const K,E> 模板結構體名binaryTreeNode<pair<const K, E>>* root;//根結點表示整個數int treeSize; //記錄結點數
};template< typename K, typename E>
int binarySearchTree<K,E>::size() const
{return treeSize;
}template< typename K, typename E>
bool binarySearchTree <K,E>::empty() const
{return treeSize == 0;
}template< typename K, typename E>
binarySearchTree <K, E>::binarySearchTree()
{root = NULL;treeSize = 0;
}template<typename K, typename E>
void binarySearchTree<K, E>::printNode(binaryTreeNode<pair<const K, E>>* Node)
{if (Node != NULL){printNode(Node->leftChild);visit(Node);printNode(Node->rightChild);}
}
template<typename K, typename E>
void binarySearchTree<K, E>::printTree()
{printNode(root);
}template<typename K,typename E>
void binarySearchTree <K, E>::insert(const pair<const K, E> & thePair)
{//找到合適的位置插入binaryTreeNode<pair<const K, E>> *p = root;binaryTreeNode<pair<const K, E>> *pp = NULL;while (p != NULL){pp = p; //記錄父結點if (thePair.first < p->element.first){p = p->leftChild;}else if (thePair.first > p->element.first){p = p->rightChild;}else { //表示鍵存在p->element.second = thePair.second;return;}}binaryTreeNode<pair<const K, E>>* newNode = new binaryTreeNode<pair<const K, E>>(thePair);if (root != NULL){if (thePair.first < pp->element.first){pp->leftChild = newNode;}else pp->rightChild = newNode;}else{root = newNode;}treeSize++;
}int main()
{binarySearchTree<int, string> myBST;myBST.insert(pair<int, string>(8, "美麗世界"));myBST.insert(pair<int, string>(9, "343434"));myBST.insert(pair<int, string>(5, "Joken"));myBST.insert(pair<int, string>(1, "VICO"));myBST.insert(pair<int, string>(6, "widget"));myBST.insert(pair<int, string>(2, "nana"));myBST.printTree();system("pause");return 0;
}
運行結果:
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的数据结构-树5-二叉搜索树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3.6.5+cuda9+cu
- 下一篇: opencv12-图像金字塔