BinarySearchTree-二叉搜索树

Posted vlyf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BinarySearchTree-二叉搜索树相关的知识,希望对你有一定的参考价值。

BinarySearchTree-二叉搜索树

? 二叉查找树(Binary Search Tree)。搜索,插入,删除的复杂度等于树高,O(log(n))。

  • 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 它的左、右子树也分别为二叉排序树;
  • 中序遍历的结果为有序列表;

代码实现如下:

/*****BinarySearchTree*****/
//根节点左边的数据比根节点小,右边比根节点大,子树也一样
#include <iostream>
#include <stack>

using namespace std;

class BinarySearchTree
{
private:
    int data;
    BinarySearchTree *left;
    BinarySearchTree *right;

public:
    BinarySearchTree(int x): data(x), left(nullptr), right(nullptr) {}
    //插入
    void Insert(BinarySearchTree *root,int x)
    {
        if(root->data<x)    //根节点的data<x,则插入右子树
        {
            if(root->right==nullptr)
                root->right = new BinarySearchTree(x);
            else
                Insert(root->right, x);

        }
        else
        {
            if(root->left==nullptr)
                root->left = new BinarySearchTree(x);
            else
                Insert(root->left, x);
        }
    }
    //前序遍历
    void PreOrder(BinarySearchTree *root)
    {
        stack<BinarySearchTree *> s;
        BinarySearchTree *p = root;
        while(p||!s.empty())
        {
            while(p)
            {
                visit(p);
                s.push(p);
                p = p->left;
            }
            if(!s.empty())
            {
                p = s.top();
                s.pop();
                p = p->right;
            }
        }
    }
    //中序遍历
    void InOrder(BinarySearchTree *root)
    {
        stack<BinarySearchTree *> s;
        BinarySearchTree *p = root;
        while(p||!s.empty())
        {
            while(p)
            {
                s.push(p);
                p=p->left;
            }
            if(!s.empty())
            {
                p = s.top();
                visit(p);
                s.pop();
                p = p->right;
            }
        }
    }
    //访问数据
    void visit(BinarySearchTree *root)
    {
        cout<<root->data<<" ";
    }

};
int main()
{
    int data[8]={6,3,5,1,9,10,22,33};
    BinarySearchTree *root = new BinarySearchTree(6);

    for(int i =1;i<8;i++)
        root->Insert(root,data[i]);
    cout<<"中序遍历为:";
    root->InOrder(root);
    cout<<endl;
    cout<<"前序遍历为:";
    root->PreOrder(root);
    return 0;
}

以上是关于BinarySearchTree-二叉搜索树的主要内容,如果未能解决你的问题,请参考以下文章

二叉搜索树(BinarySearchTree)

二叉树之二叉搜索树(BSTree)

数据结构:二叉搜索树的增删查改

数据结构:二叉搜索树的增删查改

二叉搜索树_BST

二叉搜索树_BST