【c++】构建一棵简单的二叉树

本文详细介绍了如何用C++构建二叉树,包括递归和非递归实现的构造函数、拷贝构造函数、析构函数、赋值运算符重载、前中后序遍历、层序遍历等功能。同时,还涵盖了查找特定节点、计算叶子节点个数、树的深度等算法。
摘要由CSDN通过智能技术生成

本文主要讲了如何使用c++来构建一个二叉树类,以及一些功能算法的实现。文中大部分函数的思想都是递归,其中赋值运算符重载有传统写法和现代写法两个版本,层序遍历是非递归,前、中、后序遍历有递归和非递归两个版本。

1、构造函数(递归)

2、拷贝构造函数(递归)

3、析构函数(递归)

4、赋值运算符重载(传统/现代)

5、前中后序遍历(递归/非递归)

6、层序遍历(非递归)

7、查找第k层结点个数(递归)

8、精确查找值为x的结点,并返回当前结点的指针(递归)

9、查找叶子结点个数(递归)

10、查找结点总个数(递归)

11、计算树的深度(递归)


树的结点类型,每个结点都需要有一个指向右孩子的指针,一个指向左孩子的指针,以及一个数据。(当然,如果你想构造三叉树的话,也可以增加一个指向父节点的指针。)

这里我写出了结点的构造函数,方便我们在创建树的时候使用。

注意:这棵树我使用了模板

template<typename T>
struct BinaryTreeNode
{
	BinaryTreeNode<T>* _left;//左孩子
	BinaryTreeNode<T>* _right;//右孩子
	T _data;//数据
	BinaryTreeNode(T data = T())//结点自己的构造函数,T()为一个匿名对象。
		:_left(NULL)//初始化为空
		, _right(NULL)
		, _data(data)
	{}
};

下面代码中会经常用到BinaryTreeNode<T>   所以将其重命名为Node
typedef BinaryTreeNode<T> Node;



当我们向写二叉树类的时候,直接给类设定一个根结点,以这个根结点为基础,构建二叉树。
class BinaryTree
{
 public:
 private:
    BinaryTreeNode<T>* _root;//根节点
};


1、构造函数
     BinaryTree(const T* a, size_t size,int index, const T& invalid)
构造函数有4个参数,T类型的指针a,传参时传一个数组,负责传入数据。size保存数组a 的大小,index记录下标,invalid表示非法值。
因为我们需要用到递归,所以在这个函数内部我们需要再封装一个递归函数_MakeTree(),并让它的返回值为一个Node*类型的指针。
BinaryTree(const T* a, size_t size,int index, const T& invalid)
{
	_root = _MakeTree(a,size,index,invalid);
}

我们先来观察一个树:

你会看到上面有许多NULL,这些NULL我们就可以理解为非法值invalid。这棵树的前序遍历为:

 1  2  3  NULL  NULL  4   NULL   NULL
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值