栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

二叉树代码区

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

二叉树代码区

#pragma once
#include

using namespace std;
template
struct BTreeNode
{
	BTreeNode(const T& data=T()):_data(data)
	{}
	BTreeNode* left = nullptr;
	BTreeNode* right = nullptr;
	T _data;
};

template
class BTree
{
	typedef BTreeNode Bnode;
	typedef Bnode* pnode;
public:
	BTree()
	{
		_root = nullptr;
	}
	~BTree()
	{}
	pnode Find(const T& data)
	{
		if (_root == nullptr)
			return nullptr;
		pnode pcur = _root;
		while (pcur)
		{
			if (pcur->_data == data)
			{
				return pcur;
			}
			if (pcur->_data > data)
				pcur = pcur->left;
			if (pcur->_data < data)
				pcur = pcur->right;
			if (pcur->_data == data)
				 return pcur;
		}
		return nullptr;
	}
	bool Insert(const T& data)
	{
		if (_root == nullptr)
		{
			_root = new Bnode(data);
			return true;
		}
		pnode pcur = _root;
		pnode parent = nullptr;//记录双亲
		while (pcur)
		{
			parent = pcur;
			if (pcur->_data < data)
			{
				pcur = pcur->right;
			}
			else if (pcur->_data > data)
			{
				pcur = pcur->left;
			}
			else
			{
				return false;
			}
		}
		pcur = new Bnode(data);
		if (data < parent->_data)
		{
			parent->left = pcur;
		}
		if (data > parent->_data)
		{
			parent->right = pcur;
		}
		return true;
	}
	bool Erase(const T& data)
	{
		if (_root == nullptr)
			return false;
		pnode pcur = _root;
		pnode parent = nullptr;
		while (pcur)
		{
			
			if (pcur->_data > data)
			{
				parent = pcur;
				pcur = pcur->left;
			}
			if (pcur->_data < data)
			{
				parent = pcur;
				pcur = pcur->right;
			}
			if (pcur->_data == data)
				break;
		}
		if (pcur == nullptr)
			return false; //找不到该结点
		if (nullptr == pcur->left)//没有左节点,直接删
		{
			if (parent->left == pcur)
			{
				parent->left = pcur->right;
			}
			if (parent->right == pcur)
			{
				parent->right = pcur->right;
			}
			delete pcur;
		}
		else if (nullptr == pcur->right)
		{
			if (parent->left == pcur)
			{
				parent->left = pcur->left;
			}
			if (parent->right == pcur)
			{
				parent->right = pcur->left;
			}
			delete pcur;
		}
		else
		{
			pnode Lpcur = pcur->left;
			pnode Lparent = nullptr;
			while (Lpcur)
			{
				Lparent = Lpcur;
				Lpcur = Lpcur->right;
			}
			swap(pcur->_data, Lparent->_data);
			delete Lparent;
			Lparent = nullptr;
		}
	}
	void Inorder(pnode root)
	{
		if (root == nullptr)
			return;
		Inorder(root->left);
		cout << root->_data << " ";
		Inorder(root->right);
	}
	void _Inorder()
	{
		Inorder(_root);
	}
private:
	pnode _root;
};

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/996704.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号