一颗二叉查找树的简单实现

       第一次实现的二叉查找树,在别的大牛的博客学习了很久很久。发现由于其使用的技巧较多,不适用与新手模仿,所以自己实践写出了一个有局限性,功能专一化,不完整的二叉查找树。

       使用了c++中的类来定义节点,并没有定义专门的树类,以减小代码复杂性。

class BSTNode{
    private:
        int key;            
        BSTNode *left;    
        BSTNode *right;    

   public:
        BSTNode(int value, BSTNode *l, BSTNode *r):
            key(value),left(l),right(r) {}
        BSTNode* Insert(BSTNode* tree,int k);
        void preOrder(BSTNode* tree,int depth);
};
    实现的操作只有两个,但已经能测试出树的主要功能了。

    1.插入(Insert)

BSTNode* BSTNode::Insert(BSTNode* tree,int k)
{
    if(tree== NULL){
        tree=new BSTNode(k,NULL,NULL,NULL);
    }
    else if(k<tree->key)
        tree->left=Insert(tree->left,k);
    else
        tree->right=Insert(tree->right,k);
    return tree;
}
    这段插入使用了递归实现,在实现函数时需要给定实参指针,不是很方便。但胜在简洁。

    2.先序输出(preOrder)

void BSTNode::preOrder(BSTNode* tree,int depth)
{
    if(tree!=NULL)
    {
        for(int i=0;i<depth;i++)
            cout<<"  ";
        cout<<tree->key <<endl;
        preOrder(tree->left,depth+1);
        preOrder(tree->right,depth+1);
    }
    return;
}
    采取了输出文件式的格式,按树的深度缩进空格,可直观看出书的实现情况。

    具体的程序。

int arr[]={1,7,9,41,23,4,3,5,6};
int main()
{
    BSTNode *root=NULL;
    for(int i=0;i<9;i++){
        cout<<arr[i]<<"  ";
        root=root->Insert(root,arr[i]);
    }
    cout<<"\n==前序遍历:"<<endl;;
    root->preOrder(root,0);
    return 0;
}
    定义好了一数组。将其数据存入BSTNode对象的组成的二叉查找树结构中。并且按先序输出出来。

    代码的优点在于简单,适合像我一样的新手自主摸索参考。其余功能可逐步添加。以达到掌握的目的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值