亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? binarysearchtree.h

?? 編譯原理的作業 編譯器
?? H
字號:
#ifndef BT_H_
#define BT_H_

//Concept BNode的要求,必須具有leftChild和rightChild節點域;

#include <algorithm>
#include <functional>
#include <list>
#include <string>


template <typename T>
struct BNode
{
	BNode();
	BNode(const T& elem);
	bool IsLeaf()
	{
		return leftChild == 0 && rightChild == 0;
	}
	int Height()
	{
		return ::Height(this);
	}

	BNode* leftChild;
	BNode* rightChild;
	T data;
};
template <typename T>
BNode<T>::BNode()
:leftChild(0), rightChild(0), data(T())
{
}

template <typename T>
BNode<T>::BNode(const T& elem)
:leftChild(0), rightChild(0), data(elem)
{
}

//刪除以root為根的樹;
template<class BNode>
void DestroyNode(BNode* root)
{
	if (root == 0)
		return;
	DestroyNode(root ->leftChild);
	DestroyNode(root ->rightChild);
	delete root;
}

template <class BNode>
int Height(BNode* node)
{
	if (node ->leftChild == 0 && node ->rightChild == 0)
		return 0;
	else
		return std::max(Height(node ->leftChild), Height(node ->rightChild)) + 1;
}

template <class BNode, class Functor>
void InOrderTravel(BNode* node, Functor f)
{
	if (node != 0)
	{
		InOrderTravel(node ->leftChild, f);
		f(node);
		InOrderTravel(node ->rightChild, f);
	}
}

template <class BNode, class Functor>
void PreOrderTravel(BNode* node, Functor f)
{
	if (node != 0)
	{
		f(node);
		PreOrderTravel(node ->leftChild, f);
		PreOrderTravel(node ->rightChild, f);
	}
}

template <class BNode, class Functor>
void PostOrderTravel(BNode node, Functor f)
{
	if (node != 0)
	{
		PostOrderTravel(node ->leftChild, f);
		PostOrderTravel(node ->rightChild, f);
		f(node);
	}
}

template <class BNode, class Functor>
void LevelOrderTravel(BNode* node, Functor f)
{
	std::list<BNode<T>*> list;

	while (node != 0)
	{
		f(node);

		if (node ->leftChild != 0)
			list.push_back(node ->leftChild);
		if (node ->rightChild != 0)
			list.push_back(node ->rightChild);

		if (list.empty())
			return;

		node = list.front();
		list.pop_front();
	}
}

template <typename T, class Node = BNode<T> >
class BinarySearchTree
{
public:
	BinarySearchTree();
	BinarySearchTree(const T a[], int length);
	~BinarySearchTree();

	void Insert(const T& elem);
	void Delete(const T& elem);
	T Exists(const T& elem);

	template <class Functor>
	void PostOrderTravel(Functor f);
	template <class Functor>
	void InOrderTravel(Functor f);
	template <class Functor>
	void PreOrderTravel(Functor f);
	template <class Functor>
	void LevelOrderTravel(Functor f);
	
private:
	Node* root;
private:
	virtual void Insert(Node* node);
};

template <typename T, class Node>
BinarySearchTree<T, Node>::BinarySearchTree()
:root(0)
{
}

template <typename T, class Node>
BinarySearchTree<T, Node>::BinarySearchTree(const T a[], int length)
{
	for (int i = 0; i < length; ++i)
	{
		Insert(a[i]);
	}
}
template <typename T, class Node>
BinarySearchTree<T, Node>::~BinarySearchTree()
{
	::DestroyNode(root);
}

template <typename T, class Node>
void BinarySearchTree<T, Node>::Delete(const T& elem)
{
	//temp保存欲刪除節點, parent為欲刪除節點之父節點;
	BNode<T>* temp = root;
	BNode<T>* parent = root;

	while (temp != 0)
	{
		if (elem < temp ->data)
		{
			parent = temp;
			temp = temp ->leftChild;
		}
		else if (elem > temp ->data)
		{
			parent = temp;
			temp = temp ->rightChild;
		}
		else
		{	//找到節點;

			//處理刪除節點具有雙子樹的情況,可以取右子樹的最小元填補或者左子樹的最大元填補;
			//這里取左子樹的最大元;
			if (temp ->leftChild != 0 && temp ->rightChild != 0)
			{
				BNode<T>* node = temp ->leftChild;
				BNode<T>* p    = temp;

				while (node ->rightChild != 0)
				{
					p = node;
					node = node ->rightChild;
				}

				temp ->data = node ->data;
				temp = node;
				parent = p;
			}

			//處理刪除節點具有單子樹的情況;
			//sub保存子樹指針;
			BNode<T>* sub;

			if (temp ->leftChild != 0)
				sub = temp ->leftChild;
			else
				sub = temp ->rightChild;

			//刪除節點為根的情況;
			if (temp == root)
				root = sub;
			else
			{
				if (temp == parent ->leftChild)
					parent ->leftChild = sub;
				else
					parent ->rightChild = sub;
				delete temp;
				return;
			}
		}
	}
}


template <typename T, class Node>
void BinarySearchTree<T, Node>::Insert(const T& elem)
{
	Insert(new Node(elem));
}

template <typename T, class Node>
void BinarySearchTree<T, Node>::Insert(Node* node)
{
	if (root == 0)
	{
		root = node;
		return;
	}

	BNode<T>* temp = root;
	BNode<T>* location = 0;

	while (temp != 0)
	{
		location = temp;

		if (node ->data > temp ->data)
		{
			if (temp ->rightChild == 0)
			{
				temp ->rightChild = node;
				return;
			}
			temp = temp ->rightChild;

		}
		else
		{
			if (temp ->leftChild == 0)
			{
				temp ->leftChild = node;;
				return;
			}
			temp = temp ->leftChild;
		}
	}
}
template <class T, class Node>
T BinarySearchTree<T, Node>::Exists(const T& elem)
{
	if (root == 0)
		return T();

	BNode<T>* temp = root;

	while (temp != 0)
	{
		if (elem == temp ->data)
			return temp ->data;

		if (elem > temp ->data)
		{
			temp = temp ->rightChild;
		}
		else
		{
			temp = temp ->leftChild;
		}
	}
	return T();
}


template <typename T, class Node>
template<class Functor>
void BinarySearchTree<T, Node>::InOrderTravel(Functor f)
{
	::InOrderTravel(root, f);
}

template<typename T, class Node>
template<class Functor>
void BinarySearchTree<T, Node>::PreOrderTravel(Functor f)
{
	::PreOrderTravel(root, f);
}

template<typename T, class Node>
template<class Functor>
void BinarySearchTree<T, Node>::PostOrderTravel(Functor f)
{
	::PostOrderTravel(root, f);
}

template<typename T, class Node>
template<class Functor>
void BinarySearchTree<T, Node>::LevelOrderTravel(Functor f)
{
	::LevelOrderTravel(root, f);
}

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区四区在线观看| 青青青伊人色综合久久| 精品国产乱码久久久久久图片| 在线看日本不卡| aaa国产一区| 91色.com| 欧美日韩免费高清一区色橹橹 | 日韩一区二区电影| 欧美日韩一级视频| 欧美一三区三区四区免费在线看| 欧美高清视频一二三区 | 一个色综合网站| 亚洲一区二区三区视频在线| 亚洲午夜成aⅴ人片| 婷婷一区二区三区| 日韩精品免费视频人成| 久久99精品国产91久久来源| 国产另类ts人妖一区二区| 成人黄色在线看| 一本到高清视频免费精品| 色婷婷综合视频在线观看| 欧美日韩大陆一区二区| 欧美一卡二卡在线观看| 久久麻豆一区二区| 亚洲欧美日韩国产手机在线 | 久久久精品黄色| 国产精品丝袜一区| 亚洲国产wwwccc36天堂| 久久国产夜色精品鲁鲁99| 粉嫩av一区二区三区在线播放| 成人国产精品视频| 5566中文字幕一区二区电影| 精品国产露脸精彩对白 | 欧美熟乱第一页| 精品日韩一区二区三区| 国产精品每日更新在线播放网址| 亚洲免费看黄网站| 久久精品国产成人一区二区三区| 成人免费看黄yyy456| 在线综合视频播放| 日韩欧美国产电影| 一区二区三区精密机械公司| 久久99精品一区二区三区三区| 成人免费毛片a| 久久综合久久综合久久综合| 亚洲人成网站精品片在线观看| 日韩国产欧美在线播放| 91片在线免费观看| 久久久国产综合精品女国产盗摄| 亚洲主播在线观看| 成人免费观看视频| 日韩免费一区二区| 亚洲一区二区三区自拍| 粉嫩av一区二区三区粉嫩| 日韩欧美亚洲国产精品字幕久久久| 亚洲欧美日韩国产综合| 国产91丝袜在线观看| 欧美电影免费观看高清完整版| 亚洲综合一区二区| 91欧美一区二区| 国产精品热久久久久夜色精品三区 | 欧美激情一区三区| 精品一区二区三区在线视频| 欧美日韩国产小视频在线观看| 亚洲同性gay激情无套| 成人网男人的天堂| 久久亚洲一区二区三区四区| 另类欧美日韩国产在线| 精品视频色一区| 亚洲午夜一区二区| 欧美色男人天堂| 一区二区三区不卡视频| 91久久线看在观草草青青| 亚洲视频在线观看一区| 91视频.com| 一区二区视频在线| 欧美中文字幕一二三区视频| 亚洲欧美色综合| 91黄色在线观看| 一区二区激情视频| 欧美日韩一区在线| 日韩国产精品久久久| 91麻豆精品国产91久久久久| 日韩va欧美va亚洲va久久| 欧美军同video69gay| 日本特黄久久久高潮| 精品国产一区a| 国产成人av资源| 亚洲欧美日韩国产手机在线 | 美国av一区二区| 精品国产成人系列| 国产成人综合网| 中文字幕人成不卡一区| 欧美日免费三级在线| 日韩av电影天堂| 国产性色一区二区| 一本色道久久综合精品竹菊| 一区二区高清在线| 日韩一本二本av| 成人性色生活片| 亚洲成人自拍偷拍| 久久影音资源网| www.久久久久久久久| 亚洲已满18点击进入久久| 91精品麻豆日日躁夜夜躁| 寂寞少妇一区二区三区| ...中文天堂在线一区| 精品视频一区 二区 三区| 国产在线视频一区二区三区| 国产精品美女久久久久高潮| 欧美日韩精品一区二区三区四区| 六月丁香婷婷久久| 亚洲精品国产精品乱码不99| 欧美成人三级电影在线| 99久久国产综合精品麻豆| 青青草97国产精品免费观看 | 91精品国产91久久久久久一区二区 | 欧美三级三级三级爽爽爽| 久久99精品久久久久婷婷| 最新国产の精品合集bt伙计| 欧美电影免费观看高清完整版在线| 成人午夜私人影院| 久久aⅴ国产欧美74aaa| 亚洲影视在线观看| 国产精品电影一区二区| 精品国精品自拍自在线| 欧美精品日韩精品| 一本久久a久久精品亚洲| 国产69精品久久777的优势| 毛片基地黄久久久久久天堂| 亚洲五月六月丁香激情| 综合激情网...| 国产日韩精品视频一区| 久久综合五月天婷婷伊人| 欧美美女一区二区三区| 色综合久久66| 99久久综合狠狠综合久久| 国产91色综合久久免费分享| 精品在线播放午夜| 日本欧美在线看| 婷婷亚洲久悠悠色悠在线播放| 一区二区在线观看免费| ●精品国产综合乱码久久久久| 国产日韩欧美精品在线| 久久这里只有精品首页| 26uuu成人网一区二区三区| 日韩欧美电影在线| 日韩视频一区二区在线观看| 911精品国产一区二区在线| 欧美日韩另类一区| 这里是久久伊人| 日韩三级电影网址| 精品国产一区久久| 久久丝袜美腿综合| 日本一区二区三区四区| 国产精品亲子伦对白| 国产精品久久久久精k8| 亚洲三级在线播放| 亚洲精品高清在线| 午夜天堂影视香蕉久久| 视频在线观看一区二区三区| 日韩精品一二三区| 久久9热精品视频| 国产精品1区二区.| 91老师国产黑色丝袜在线| 在线观看日韩电影| 欧美一三区三区四区免费在线看 | 亚洲欧洲另类国产综合| 国产精品成人一区二区艾草 | 欧美日韩精品一区二区| 欧美电影影音先锋| 2024国产精品| 国产精品女上位| 一个色妞综合视频在线观看| 婷婷久久综合九色综合绿巨人| 久久99国产乱子伦精品免费| 高清不卡一二三区| 欧美日韩一区二区三区高清| 日韩欧美国产一二三区| 国产精品水嫩水嫩| 午夜精品影院在线观看| 韩国精品一区二区| 日本伦理一区二区| 精品国产免费人成电影在线观看四季 | 久久精品亚洲乱码伦伦中文| 成人欧美一区二区三区黑人麻豆| 亚洲影院免费观看| 国产精品一卡二卡| 欧美日韩精品系列| 国产日韩欧美高清| 天堂成人国产精品一区| 成人亚洲一区二区一| 欧美中文字幕久久 | av在线这里只有精品| 欧美日本在线播放| 国产精品天美传媒沈樵| 日本视频一区二区三区| 色综合久久综合网| 国产日韩综合av| 久久国产人妖系列|