码迷,mamicode.com
首页 > 其他好文 > 详细

二叉搜索树

时间:2018-02-19 17:28:56      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:span   amp   复杂   节点   它的   排序   def   ptr   alt   

1.  二叉搜索树,又称BST。满足三个性质:
          (1)若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
          (2)若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
          (3)它的左、右子树也分别为二叉排序树。
            技术分享图片
2. 常用操作:
(1)中序遍历二叉排序树可得到一个有序序列。一个无序序列可以通过构造一棵二叉排序树变成一个有序序列,构造树的过程即是对无序序列进行排序的过程。
(2)每次插入的新的结点都是二叉排序树上新的叶子结点,在进行插入操作时,不必移动其它结点,只需改动某个结点的指针,由空变为非空即可。时间复杂度为O(h)。
 
3. 程序代码:
#include <iostream>
#include <cstring>
#include <vector>
#include <memory>
using namespace std;

typedef struct node
{
    int val;
    shared_ptr<node> left;
    shared_ptr<node> right;
}Node;

/*插入元素*/
bool insert(shared_ptr<node> &root, int ele)
{
    if(root == NULL)    //ele不存在与二叉树,创建一个节点并返回true
    {
        root = make_shared<node>();
        root->val = ele;
        root->left = root->right = NULL;
        return true;
    }
    if(ele < root->val)
    {
        return insert(root->left, ele);
    }
    else if(ele > root->val)
    {
        return insert(root->right, ele);
    }
    else        //ele已经存在于二叉树中,故返回false
        return false;    
}

/*创建二叉搜索树*/
void creteBST(shared_ptr<node> &root, int vec[], int n)
{
    root = NULL;
    for(int i=0; i<n; ++i)
    {
        insert(root,vec[i]);
    }
}

/*前序遍历*/
void PreOrderTraverse(shared_ptr<node> &root)
{
    if(root != NULL)
    {
        cout<<root->val<<" ";
        PreOrderTraverse(root->left);
        PreOrderTraverse(root->right);    
    }
}

/*中序遍历*/
void InOrderTraverse(shared_ptr<node> &root)
{
    if(root != NULL)
    {
        InOrderTraverse(root->left);
        cout<<root->val<<" ";
        InOrderTraverse(root->right);
    }
}

int main()
{
    int vec[10] = {4, 5, 2, 1, 0, 9, 3, 7, 6, 8};
    shared_ptr<node> root = NULL;
    creteBST(root, vec, 10);
    PreOrderTraverse(root);
    cout<<endl;
    InOrderTraverse(root);
    return 0;
}

 

二叉搜索树

标签:span   amp   复杂   节点   它的   排序   def   ptr   alt   

原文地址:https://www.cnblogs.com/ladawn/p/8453937.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!