数据结构-----二叉树

C++数据结构:二叉树

二叉树是一种重要的数据结构,与数组、向量、链表都是一种顺序容器,它们提供了按位置访问数据的手段。但是有一个缺点,它们都是按照位置来确定数据,想要通过值来获取数据,只能通过遍历的方式。而二叉树在很大程度上解决了这个缺点,二叉树是按值来保存元素,也按值来访问元素。二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树是递归定义的。二叉树底层数据结构最好采用链表描述。

二叉树在排序、查找、大规模数据索引方面有很多很多应用,二叉树排序是简单算法排序中速度最快的。二叉树是一种获得最佳答案的算法,在实际项目中,用在决策分析的场合比较多。在实际应用中也不一定是二叉树,可以是多叉树

参考:

https://www.baidu.com/link?url=-qLlbAhih-APh8yxFn9N6rh4qpgPQAeiueITwDYJA_BvJOJ4x7SvQhPnpfnYixLMuD-W8c38o0VfTuYyUcPfHp2lh-QziWH2BUSBiW-rb9S&wd=&eqid=ff9b937f00000830000000065cf0f4a8

抽象数据类型 Tree
{
	实例
	元素集合;如果非空,则集合划分为一个根,一颗左子树和一颗右子树;每一课子树也是二叉树

	操作
	empty();//
	size();//
	preOrder(visit);//前序遍历二叉树;visit是访问函数
	inOrder(visit);//中序遍历二叉树
	postOrder(visit);//后序遍历二叉树
	levelOrder(visit);//层次遍历二叉树

};

template<class T>
class Tree
{
public:
	virtual ~Tree(){}
	virtual bool empty() const = 0;
	virtual int size() const = 0;
	virtual void preOrder(void(*)(T*)) = 0;
	virtual void inOrder(void(*)(T*)) = 0;
	virtual void postOrder(void(*)(T*)) = 0;
	virtual levelOrder(void(*)(T*)) = 0;
};

主要操作:

确定高度;

确定元素数目;

复制;

显示或打印二叉树;

确定两颗二叉树是否一样;

删除整棵树;

这些操作通过有步骤的遍历二叉树来完成,每个元素仅被访问一次。

二叉树遍历

先序遍历:在第一次遍历到节点时就执行操作,一般只是想遍历执行操作(或输出结果)可选用先序遍历;

中序遍历:对于二分搜索树,中序遍历的操作顺序(或输出结果顺序)是符合从小到大(或从大到小)顺序的,故要遍历输出排序好的结果需要使用中序遍历

后序遍历:后续遍历的特点是执行操作时,肯定已经遍历过该节点的左右子节点,故适用于要进行破坏性操作的情况,比如删除所有节点。判断树中是否存在相同子树时,用的就是后序遍历。对应了“在执行操作时,肯定访问完了左右两个子树"。销毁所有节点,也可以用层次遍历实现。

 

 

上一篇:python - django (logging 日志配置和简单使用)


下一篇:P1576 最小花费