二叉樹實例學習

第一次學習: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; }
相關文章
相關標籤/搜索