手写数据结构之普通查找二叉树

前段时间去面试,不是算法就是源码,被问到崩溃,这是今年程序员多了,还是要求高了。算法还好吧,状态好还能写两个简单的,源码说实话我都不主动去看了,都是系统出问题了我再来以这个为切入点去看看。面试机会很多,但结果都是等通知或者薪资压榨太多,不上班就不上班把,再怎么也不能走倒退路。

哪里不会就学哪里吧,没有撤退可言。

查找二叉树的定义:所有的左子树都比节点小,所有的右子树都比节点大。(数据结构与算法分析上定义的,其实反过来定义也可以吧,左子树大右子树小)

示例图:

可以看到查找二叉树天然有序,查找某个元素,如果比节点大就往左,如果比节点小就往右。如果查找二叉树分布的好(标注1),它的查找时间是O(logN)。我们采用中序遍历它,直接可以得到一个从小到大排序的数组。

适用场景:它的综合性能很强,不论是查找,插入,删除都有很不错的性能。

标注1的解释:什么叫查找二叉树分布的好,我先讲一个最差的查找二叉树情形。如果一个按从小到大的数组转成查找二叉树会怎么样,是不是查找二叉树只有右子树这一边,其实它就成了一个链表。那么它的最坏查找时间就是O(N),但一般情况下,这个速度也是很快了,它的插入性能还不如普通的链表了。所以最好的查找二叉树就是要求趋向于完全二叉树。树的最高高度越低,它的查找就越快。

普通查找二叉树的进阶:普通的查找二叉树是很难做到分布完全,所以平衡查找二叉树应用而生。普通查找二叉树通过单旋转或双旋转操作变成平衡查找二叉树(元素分布完全,形状趋向于完全二叉树)

我用java语言来实现了一下普通的查找二叉树,增删查都有。

展望:我想内部实现一个Iterator迭代器的,方便遍历查询。但是没有想出树只遍历一遍,就迭代完成的算法。如果是两遍的话,我实现了toArray()树转数组的方法,然后数组再遍历,有思路的朋友可以分享一下。

package com.tczs.tree;

import java.io.Serializable;
import java.lang.reflect.Array;
import java.util.Arrays;

/**
 * 普通的查找二叉树
 * @param <T>
 * @author taoer.li
 * @date 2020.10.06
 */
public class BinarySearchTree<T extends Comparable<T>> implements Serializable{

    private int length;
    private BinaryNode root;

    private transie
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

3wtczs93点抗母

钱癌晚期

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值