数据结构---二叉树的实现

BinNode接口实现

template <typename T> BinNodePosi(T) BinNode<T> ::insertAsLc(T const &e)
{
return Lchild=new BinNode(e,this);
}
template <typename T>
int BinNode<T>::size()
{
	//后代总数,亦即以其为根的子树的规模
	int s=1;//计入本身
	if(lchild) s+=lchild->size();//递归计入左子树的规模
	if(rchild) s+=rchild->size();//递归计入右子树规模
	return s;
}//o(n=|size|)
template <typename T> class BinTree
{
	protected:
		int _size;//规模
		BinNodePosi(T) _root;//根结点
		virtual int updateHeight(BinNodePosi(T) x);//更新结点x的高度
		//为什么在这里定义为virtual类
		//因为在很多的二叉树中其对于高度的定义都是不尽相同的,用virture便于重写
		void updateHeightAbove(BinNodePosi(T) x);//更新x及祖先的高度
	public:
		int size() const {return _size;}//规模
		bool empty() const {return !_root;}//判空
		BinNodePosi(T) root() const {return _root;}//树根
		

}

1.1高度更新

#define starture(p) ( (p)?(p)->height:-1 )
template <typename T> //更新结点x高度,具体规则因树不同而异
	int BinTree<T>::updateHeight(BinNodePosi(T) x)
	{
		return x->height=1+max(stature(x->lchild),stature(x->rchild));
		
	}

1.2结点插入

template <typename T>BinNodePosi(T)
BinTree<T>::insertAsRc(BinNodePosi(T) x,T const& e)//插入右结点
{
	//insertAsLc()对称
	_size++;
	x->insertAsRc(e);
	updateHeightAbove(x);
	return x->rchild;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不停---

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值