第一次學習:node
節點類代碼頭文件:ios
#ifndef BINNODE_H #define BINNODE_H #include <iostream> //***************************************** //代碼5.2 , BinNode狀態與性質的判斷 #define isRoot(x) (!((x).parent)) #define isLChild(x) (!isRoot(x)&&(&(x)==(x).parent->lc)) //不是根節點,同時必須是父節點的左孩子 //******************************************* #define BinNodePosi(T) BinNode<T>* //節點位置 typedef enum{RB_RED,RB_BLACK} RBColor;//節點顏色 template <typename T> class BinNode { public: T data;//數值 int height; int npl;//Null Path Length(左式堆,也可直接用height代替) RBColor color; BinNodePosi(T) parent;//父節點 BinNodePosi(T) lc;//左子節點 BinNodePosi(T) rc;//右子節點 //構造函數 BinNode():parent(NULL),lc(NULL),rc(NULL),height(0),npl(1),color(RB_RED){} BinNode(T e,BinNodePosi(T) p=NULL,BinNodePosi(T) lc=NULL,BinNodePosi(T) rc=NULL, int h=0,int l=1,RBColor c=RB_RED) { data=e; parent=p; lc=lc,rc=rc; height=h; npl=l; color=c; } }; #endif // BINNODE_H
節點類測試程序:函數
#include <iostream> #include <binnode.h> #include <string> using namespace std; void judgeRoot(BinNode<string> &node) { if(isRoot(node)) cout<<node.data<<" is root!"<<endl; else cout<<node.data<<" is not a root!"<<endl; } void judgeLChild(BinNode<string> &node) { if(isLChild(node)) cout<<node.data<<" is left child!"<<endl; else cout<<node.data<<" is not left child!"<<endl; } int main() { BinNode<string> n1("node1"); BinNode<string> n0("node0"); BinNode<string> n2("node2"); n1.lc=&n2; n2.parent=&n1; // judgeNode(n0);//測試根節點函數」isRoot()「 judgeLChild(n2);//測試左孩子函數「isLChild(node)」
return 0; }