数据结构与算法-BST二叉搜索树(二叉排序树)【十九】

线性表在添加和删除的效率较低,所以我们考虑特殊的树,考虑这种存储结构,提高查找效率,以及动态添加和删除的效率。

这时会引入 【二叉搜索树】

二叉搜索树的定义

定义【仍然是递归定义】:

  1. 左子树为空,那么左子树上的所有值一定是小于根节点的值。
  2. 右子树不为空,那么右子树上的所有值一定是大于等于根节点的值。
  3. 左右子树也是一颗二叉搜索树。

二叉搜索树 也称为二叉排序树

例子:

       5         第一层                                       
     /   \                                                
    0      9     第二层                                  
   / \    / \                                           
  -1  3  7   12  第三层
二叉树节点定义

  // Definition for a binary tree node.
  function TreeNode(val) {
      this.val = val;
      this.left = this.right = null;
  }


二叉搜索树的查找

leetcode -700


var searchBST = function(root, val) {
    if (!root || root.val === val) { return root }
    if (val < root.val) {
        return searchBST(root.left, val)
    }
    if (val >= root.val) {
        return searchBST(root.right, val)
    }
}

二叉搜索树的插入

tips: 二叉搜索树插入的节点一定在叶子节点上。【不是父亲节点一定是叶子节点,而是插入的节点本身一定是叶子节点。】

leetcode-701

var insertIntoBST = function(root, val) {
    if (!root) return new TreeNode(val);
    if (val < root.val) {
        if (root.left) {
            insertIntoBST(root.left, val)
        }else if (!root.left) {
            root.left = new TreeNode(val)        
        }
    }
    if (val >= root.val) {
        if (root.right) {
            insertIntoBST(root.right, val)
        } else if (!root.right) {        
            root.right = new TreeNode(val)
        }
    }
    return root
    
}


二叉搜索树的平均查找长度

咱们以上面的有限序列[-1, 0, 3, 5, 7, 9, 12] 为例。

最好的情况下就是这个有序序列的判定树:

       5         第一层                                       
     /   \                                                
    0      9     第二层                                  
   / \    / \                                           
  -1  3  7   12  第三层

查找成功的情况下,查找次数为所在的层数; 这时候的平均查找长度为 log2 (n + 1) - 1

最坏的情况下就是层数达到最大:

       -1                                             
         \                                                
           0                                     
            \                                           
	  		  3 
			    \
			      5
				    \ 
				      7
				       \ 
				        9
				          \ 
				           12

查找成功的情况下,查找次数也为所在的层数,此时平均查找长度为(n + 1) / 2


在最差的情况下,和线性表的查找是相同效率的。所以我们需要尽量将二叉搜索树“平衡”一下,至少层数不要那么极端的深。

这就引出了 平衡二叉树

to be continued

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值