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

C++数据结构二叉树实现

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

C++数据结构二叉树实现

#include 
using namespace std;
//有序二叉树:左子树value小于右子树value


struct node;
typedef struct tree
{
	struct node* p_node;
}; tree;
typedef struct node
{
	int val;
	tree left;
	tree right;
}; node;

typedef void (*pfunc_t)(int);//创建函数指针类型,用于指向函数print_cb
//树的初始化
void tree_init(tree* p_tree)
{
	p_tree->p_node = NULL;//把树设置为没有节点的空树
}
//清除函数
void tree_deinit(tree* p_tree)
{
	if (!p_tree->p_node)
	{
		return;
	}

	tree_deinit(&(p_tree->p_node->left));
	tree_deinit(&(p_tree->p_node->right));
	delete(p_tree->p_node);
	p_tree->p_node = NULL;
}
//查找函数
tree* tree_search(const tree* p_tree,int val)
{
	if (p_tree->p_node== NULL)
	{
		//cout << "第一次节点地址" << endl;
		return (tree *)p_tree;
	}

	if (p_tree->p_node->val == val)
	{
		return (tree *)p_tree;
	}
	else if (p_tree->p_node->val > val)
	{
		return tree_search(&(p_tree->p_node->left), val);
	}
	else
	{
		return tree_search(&(p_tree->p_node->right), val);
	}
}
//插入函数
bool tree_insert(tree* p_tree, int val)
{

	tree* p_tempt = tree_search(p_tree, val);

	//if (p_tempt->p_node==NULL)
	//{
	//	cout << "0" << endl;
	//	return false;
	//}
	node* p_node = new node;
	//p_node = NULL;
	if (!p_node)
	{
		cout << "内存分配失败" << endl;
		return false;
	}
	p_node->val = val;
	p_node->left.p_node = NULL;
	p_node->right.p_node = NULL;
	p_tempt->p_node = p_node;//把动态分布的节点挂在找到的节点上
	//cout << "1" << endl;
	return true;
}
void print_cb(int val)
{
	cout << val << " ";
}
//以中序遍历处理树里所有节点的函数
void tree_miter(const tree *p_tree,pfunc_t p_func)
{
	if (!p_tree->p_node)
	{
		//cout << "0" << endl;
		return;
	}
	tree_miter(&(p_tree->p_node->left), p_func);//递归调用tree_miter函数处理左子树
	p_func(p_tree->p_node->val);
	tree_miter((&p_tree->p_node->right), p_func);
	
}

void test05()
{
	tree tr = { 0 };
	tree_init(&tr);
	tree_insert(&tr, 50);
	tree_insert(&tr, 25);
	tree_insert(&tr, 75);
	tree_insert(&tr, 13);
	tree_insert(&tr, 37);
	tree_insert(&tr, 67);
	tree_insert(&tr, 88);
	tree_insert(&tr, 7);

	tree_miter(&tr, print_cb);
}
int main()
{
	test05();


	system("pause");
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/966093.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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