【c++】二叉搜索树的插入、查找、非递归删除

本文介绍了如何在C++中操作二叉搜索树,包括插入元素、查找特定元素以及非递归方式删除节点。特别强调了在删除单节点和有一分支的根节点时如何避免内存泄漏的问题,尤其是在使用私有成员变量_root的情况下。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

尤其注意删除单个根结点、删除有一个分支的根结点时要防止内存泄露(_root为私有成员时)

#include <iostream>
#include <stack>
#include <queue>

using namespace std;

//结点类
template <class T>
class BinaryNode
{
public:
	T data;
	BinaryNode<T> *lchild;
	BinaryNode<T> *rchild;

	BinaryNode();
	BinaryNode(T val);
private:

};

template <class T>
BinaryNode<T>::BinaryNode()
{
	data = 0;
	lchild = NULL;
	rchild = NULL;
}

template <class T>
BinaryNode<T>::BinaryNode(T val)
{
	data = val;
	lchild = NULL;
	rchild = NULL;
}

//二叉树类
template <class  T>
class BinaryTree
{
private:
	BinaryNode<T> *_root;  //根结点

public:
	BinaryTree();	//构造空结点
	BinaryTree(const T preList[], const int size, int index, const T end);	//先序构造
	~BinaryTree();

	BinaryNode<T>* CreateBiTree(const T preList[], const int size, int &index, const T end);	//先序创建二叉树
	void ClearBiTree(BinaryNode<T> *root);  //销毁二叉树
	void PreVisitBiTree();	//先序遍历,非递归
	void MidVisitBiTree();	//中序遍历,非递归
	void PostVisitBiTree();	//后序遍历,非递归
	void LevelVisitBiTree();//层序遍历,非递归
	void InsertTree(int val);
	void DeleteTree(int val);
	BinaryNode<T>* SearchTree(int val);
};

//构造空树
template <class T>
BinaryTree<T>::BinaryTree()
{
	_root = NULL;
}

//先序构造二叉树
template <class T>
BinaryTree<T>::BinaryTree(const T preList[], const int size, int index, const T end)
{
	_root = CreateBiTree(preList, size, index, end);
}

//析构
template <class T>
BinaryTree<T>::~BinaryTree()
{
	ClearBiTree(_root);
	_root = NULL;
}

//先序创建二叉树
template <class T>
BinaryNode<T>* BinaryTree<T>::CreateBiTree(const T preList[],const int size, int &index,const T end)  //特别注意:index必须用引用,否则函数的两个++index将不会正常改变
{
	BinaryNode<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值