发树的父结点表示法抽象数据类型的实现以及相关少数几个算发的实现(oop)
其实这种树实现,在并查集中使用到了,其中union操作FindEqual(),折叠算法等都是实现在该树上的操作,所发代码为自己学习过程中编写,大家多讨论:
类的声明:
#ifndef PTREE_H
#define PTREE_H
#include<iostream.h>
#include<stdlib.h>
#include"LinkedStack.h"
#include"LinkedQueue.h"
#define defaultSize 20
////////////////////////////////////////////////
//采用父结点表示法的树的结点结构
////////////////////////////////////////////////
template<class T>
struct PTreeNode
{
T data; //结点的数据域
int parent; //父结点的指针
PTreeNode(T val=-2,int par=-2) //构造函数
{data=val;parent=par;};
};
////////////////////////////树的结点结构定义结束
////////////////////////////////////////////////
//PTree类模板用父结点表示法实现的树类
////////////////////////////////////////////////
template<class T>
class PTree
{
private:
PTreeNode<T>* NodeList; //树的顺序存储的结点数组
int size; //当前树的结点的最后位置
int current; //当前结点的指针
int maxSize; //默认的最大数组空间
public:
PTree(char* s,int n); //构造函数,通过广义表描述字符串创建
~PTree() //析构函数,释放结点数组的内存空间
{delete [] NodeList;};
void Display(); //显示当前树的存储结构的内容
int FindParent(int i) //找出当前结点的父结点指针
{return NodeList[i].parent;};
int FindFirstChild(int i); //找出当前结点i的长子结点
int FindNextSibling(int i); //找出当前结点的相邻的兄弟结点
int NearestCommonAncestor(int p,int q);//找p和q的最近公共祖先结点
};
/////////////////////////////PTree类模板声明结束