自己动手写数据结构:二叉树BinaryTree类模板C++实现(功能较全)

这是一个C++实现的二叉树类模板BinaryTree,包含节点结构体TNode,以及插入、删除、遍历等操作。类内定义了迭代器TIterator,支持前序遍历和后序遍历。此外,还有判断节点是否为根节点、叶节点,获取节点层级,交换节点子节点,删除叶节点等功能。
摘要由CSDN通过智能技术生成
#ifndef MYBINARYTREE_H
#define MYBINARYTREE_H

template <class T>
class BinaryTree
{
protected:
	struct TNode
	{
		T val;
		TNode* parent;
		TNode* left;
		TNode* right;
		TNode(T t, TNode* p = 0, TNode* l = 0, TNode* r = 0):val(t), parent(p), left(l), right(r) 
		{
			if (!parent) parent = this;
		}
	};
private:
	TNode* _root;
public:
	class TIterator
	{
		BinaryTree* tree;
		TNode* node;
	public:
		friend class BinaryTree;
		TIterator():tree(0), node(0) {}
		TIterator(const TIterator& it):tree(it.tree), node(it.node) {}
		TIterator(BinaryTree* t, TNode* n = 0):tree(t), node(n) {}

		TIterator& operator = (const TIterator& it)
		{
			tree = it.tree;
			node = it.node;
			return *this;
		}
		bool operator == (const TIterator& it) {return (tree == it.tree && node == it.node);}
		bool operator != (const TIterator& it) {return !(*this == it);}

		TIterator& operator ++ () 
		{
			node = preorderSuccessor(node);
			return *this;
		}
		TIterator operator ++ (int)
		{
			TIterator it(*this);
			node = preorderSuccessor(node);
			return it;
		}

		T& operator *() {return node->val;}
		TNode* operator ->() {return node;}
		const T& operator *() const {return node->val;}
		const TNode* operator ->() const {return node;}
		bool operator !() {return node == 0;}

	protected:
	};

	BinaryTree():_root(0) {}
	BinaryTree(const BinaryTree& b)
	{
		_root = clone(b._root, 0);
	}
	BinaryTree(const T& t):_root(new TNode(t)) {_root->parent = _root;}
	BinaryTree(const T& t, const
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值