二叉排序树C++构造

来源:互联网 发布:2016年1月非农数据 编辑:程序博客网 时间:2024/04/30 07:25

初次尝试使用C++来构造二叉排序树

定义:

二叉排序树或者是一颗空树,或者是具有以下性质的树

1.左子树(如果存在)上的所有节点的关键字都小于根节点的关键字

2.右子树(如果存在)上的所有节点的关键字都大于根节点的关键字

3.左子树和右子树也是二叉排序树

构造:

首先构造节点

class node{public:    int data;    node *left,*right;    node(void){ data = NULL, left = NULL, right = NULL; }    node(int Data){ data = Data, left = NULL, right = NULL; }       ~node(void);};

构造二叉树

class CBTree{public:    int maxnum,num;    node root;    CBTree(void);    ~CBTree(void);    void NodeAdd(node *&Root,node *Data);    bool NodeSearch(node* Root,int Data);};CBTree::CBTree(void){    maxnum=100;    num=0;    root=NULL;}CBTree::~CBTree(void){    //析构}

这样一棵简单的二叉树的基本结构就搞定了,不过要成为具体的二叉
排序树就需要在节点插入的时候些处理了。

节点插入:

void CBTree::NodeAdd(node* &Node,node* NodeData){    if(num==maxnum)    {        cout<<"full"<<endl;        return;    }    if(num==0)    {        *Node=*NodeData;        num++;    }    else    {        if(Node==NULL)        {            Node=NodeData;            num++;        }        else if(Node->data>NodeData->data)            NodeAdd(Node->left,NodeData);        else            NodeAdd(Node->right,NodeData);    }}

节点查找:

bool CBTree::NodeSearch(node* Node,int Data){    if(num==0)    {        return false;    }    if(Node)    {        if(Node->data==Data)        {            return true;        }        else if(Node->data>Data)        {            return NodeSearch(Node->left,Data);        }        else        {            return NodeSearch(Node->right,Data);        }    }    else    {        return false;    }}

构造一棵二叉排序树:

void main(){    int i,a;    CBTree Btree;    node *Node,*Root=&Btree.root;    for(i=0;i<10;i++)    {        cin>>a;        while(Btree.NodeSearchRoot, a))        {            cout << "已存在,请重新输入" << endl;            cin >> a;        }        Node=new node(a);                   Btree.NodeAdd(Root,Node)    }}   
1 0
原创粉丝点击