数据结构与算法 — 二叉搜索树 及其操作与实现、二叉搜索树的缺陷

目录

一、二叉搜索树

二、二叉搜索树的操作及实现

  1.插入数据

  2.遍历二叉搜索树

        (1).先序遍历

        (2).中序遍历

        (3).后序遍历

  3.最大值和最小值 

  4.搜索特定的值 

  5.二叉搜索树的删除

        (1).查找到要删除的节点

        (2).删除的节点是叶子节点

        (3).删除的节点有一个子节点

        (4).删除的节点有两个子节点

三、二叉搜索树的缺陷


一、二叉搜索树

        二叉搜索树(BST,Binary Search Tree),也称二叉排序树二叉查找树

        二叉搜索树是一颗二叉树,可以为空;如果不为空,满足以下性质:

  • 非空左子树的所有键值小于其根结点的键值。
  • 非空右子树的所有键值大于其根结点的键值。
  • 左、右子树本身也都是二叉搜索树。

举个例子:下图中第一个不是二叉搜索树,第二三个符合二叉搜索树的特征

 

二叉搜索树的特点:

        相对较小的值总是保存在左结点上,相对较大的值总是保存在右结点上。查找效率非常高,这也是二叉搜索树中“搜索”一词的来源。

 

二、二叉搜索树的操作及实现

  • insert(key)向树中插入一个新的键。
  • search(key)在树中查找一个键,如果结点存在,则返回true;如果不存在,则返回false
  • inOrderTraverse通过中序遍历方式遍历所有结点。
  • preOrderTraverse通过先序遍历方式遍历所有结点。
  • postOrderTraverse通过后序遍历方式遍历所有结点。
  • min返回树中最小的值/键。
  • max返回树中最大的值/键。
  • remove(key)从树中移除某个键。

  1.插入数据

    //插入数据:对外给用户调用的方法
    BinarySerachTree.prototype.insert = function(key){
        //1.根据key创建节点
        var newNode = new Node(key)

        //2.判断根节点是否有值
        if(this.root == null){
            this.root = newNode
        }else{
            this.insertNode(this.root,newNode)
        }
    }

    BinarySerachTree.prototype.insertNode = function(node,newNode){
        if(newNode.key < node.key){//向左查找
            if(node.left == null){
                node.left = newNode
            }else{
                this.insertNode(node.left,newNode)
            }
        }else{//向右查找
            if(node.right == null){
                node.right = newNode
            }else{
                this.insertNode(node.right,newNode)
            }
        }
    }

  2.遍历二叉搜索树

        此处树的遍历,针对所有的二叉树都是适用的,不仅仅是二叉搜索树。

        树的遍历:

         遍历一棵树是指访问树的每个结点(也可以对每个结点进行某些操作)。二叉树的遍历常见的有三种方式: 先序遍历、中序遍历、后续遍历。(还有程序遍历, 使用较少, 可以使用队列来完成)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值