⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tree.h

📁 顺序二叉树和树的复制及哈夫曼编码
💻 H
字号:

顺序二叉树和树的复制及哈夫曼编码       网络二班
                   任文旭     41


template<class T>
class TBinTreeNode //tree node object;
{
	private:
		T info; //tree node info;
        TBinTreeNode<T> *lson,*rson,*father; //three poiters structure; 
	public:
		TBinTreeNode(){
			lson=0;
			 rson=0;
			father=0;
		}
		
		T& GetElem(){return info;}
		void SetElem(T e){info=e;}

		TBinTreeNode* GetSon(char sonNo)
		{
			if(sonNo==1) return lson;
			else         return rson;
		}
      void SetSon(char sonNo,TBinTreeNode<T>* pSon)
	   {
           if(sonNo==1)  lson=pSon;
		   else          rson=pSon;
	   }

	  void Setfather(TBinTreeNode<T>* f)
	  { father=f;}
	  TBinTreeNode<T>* Getfather()
	  {return father;}

	  bool IsLeaf()
	  {return (lson==NULL && rson==NULL);}

};

enum TTraverseMode{preorder,inorder,postorder,levelorder};

template<class T>
class TBinTree  //tree object;
{
private:
 
 long PreOrder(TBinTreeNode<T>* pNode,TBinTreeNode<T>** e);
 long InOrder(TBinTreeNode<T>* pNode,TBinTreeNode<T>** e);
 long PostOrder(TBinTreeNode<T>* pNode,TBinTreeNode<T>** e);
 long LevelOrder(TBinTreeNode<T>* pNode,TBinTreeNode<T>** e);
 TBinTreeNode<T>* CopyTree(TBinTreeNode<T>* pNode,long& n);
public:
 long numNodes;// num of nodes;
 TBinTreeNode<T>* root;// the root
 TBinTree();
 ~TBinTree();

  virtual TBinTreeNode<T>* SetRoot(TBinTreeNode<T> *rt);
  virtual TBinTreeNode<T>* GetRoot();

  virtual long GetLevel(TBinTreeNode<T>*pNode);// get the level of a node according its poiter;
  virtual long GetHeight(TBinTreeNode<T> * pNode); //get the subtree's height which root is pNode; 
  virtual long GetNumSubNodes(TBinTreeNode<T> * pNode);//get the subtree's count of nodes
  //virtual long GetNumLeaves(TBinTreeNode<T>* pNode);//get count of leaves of a subtree

  virtual void Copy(TBinTree<T>& atree);
  //cluster in different ways;
  virtual long Cluster(TBinTreeNode<T>* pNode,T** e,TTraverseMode tm);
  virtual long Cluster(TBinTreeNode<T>* pNode,TBinTreeNode<T>** e,TTraverseMode tm);
  
  virtual long ClusterAncestors(TBinTreeNode<T>* pNode,T**e); 
  virtual long ClusterAncestors(TBinTreeNode<T>* pNode,TBinTreeNode<T>** pe);

  virtual long ClusterDescendants(TBinTreeNode<T>* pNode,T** es);
  virtual long ClusterDescendants(TBinTreeNode<T>* pNode,TBinTreeNode<T>** pe);

  virtual long ClusterSeniors(TBinTreeNode<T>* pNode,TBinTreeNode<T>** pe);
  virtual long ClusterSeniors(TBinTreeNode<T>* pNode,T** es);

  virtual long ClusterJuniors(TBinTreeNode<T>* pNode,TBinTreeNode<T>** pe);
  virtual long ClusterJuniors(TBinTreeNode<T>* pNode,T** es);

  virtual long GetLeaves(TBinTreeNode<T>** e);

  virtual void DeleteSubTree(TBinTreeNode<T>* pNode,int sonNo);    //delete subtree of a pNode;
  void ReleaseAllNodes();  //

 
  virtual TBinTreeNode<T>* Locate(TBinTreeNode<T>* rt,T& e,long sn=1);

  virtual TBinTreeNode<T>* GListToTree(long * gListExp,T* es,long numElem);   //lists to tree;
  virtual long TreeToGList(TBinTreeNode<T> * rt,T* e);  // tree to lists;

  virtual TBinTreeNode<T>* PreOrderExToTree(T* nodes,int numElem);  // preorder extention to tree;
  virtual TBinTreeNode<T>* InPreToTree(T* pa ,T* ia,long p1,long p2,long i1,long i2);

  virtual void Print(TBinTreeNode<T>* rt,TTraverseMode mode=preorder);    //print the result in different mode;
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -