1、定义spa
1.若它的左子树不为空,则左子树上全部结点的值均小于等于根结点的值;3d
2.若它的右子树不为空,则右子树上全部结点的值均大于等于根结点的值;blog
3.它的左右子树均为二分查找树。for循环
2、图解实例效率
选取一个节点为参照根节点,会发现全部的左侧子节点小于等于参照点,右侧大于等于参照点。二叉树
好比根节点9, 9全部的左侧子节点(五、二、七、一、3)都小于等于9.循环
好比根节点13,13全部的左侧子节点(十一、十、12)都大于等于13.引用
一、查找im
查找节点 10:根节点9开始,10>9 右侧,10<13 左侧,10<11 左侧,找到10.查询
二、插入
插入 子节点 4:4<9 左侧,4<5 左侧,4>2 右侧,4>3 右侧
三、删除
删除节点(由于状况有多种,处理逻辑也是比较麻烦。)
A:删除叶子:好吧就是一个干巴巴的叶子,好办,找到-删除。
删除 7 ,这个7是叶子,那就找到并删除
B:有一个分支的,删除节点,子节点上提。
删除 2节点:找到2 ,删除2
再上提子节点 1
C:两个分支,节点删除,右子树最小的数代替被删除节点,
由于右子树最多有一个右叶子,从新指定引用。
删除 13,13有左右两个分支:
由于 右分支确定大于左面分支,因此上提右子节点 15
4、其实三已经告诉了咱们,会有一种极端状况
二分查找树就是为了提升查询效率,而当前这种和咱们写了一堆for循环是同样的。
为了应对这种状况:又出现了平衡二叉树--红黑树。后面会提到。