学习笔记-二叉排序树

二叉排序树对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。如果有相同的值,可以将该节点放在左子节点或右子节点。二叉排序树的创建和遍历思路:比较节点的值,小于就放在左子节点,大于就放在右子节点,如果子节点不为空,就递归添加。 //添加节点 public void add(Node node){ if(node==null){ return; } if(node.
摘要由CSDN通过智能技术生成

二叉排序树

对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。如果有相同的值,可以将该节点放在左子节点或右子节点。
在这里插入图片描述

二叉排序树的创建和遍历

思路:比较节点的值,小于就放在左子节点,大于就放在右子节点,如果子节点不为空,就递归添加。

	//添加节点
    public void add(Node node){
   
         if(node==null){
   
             return;
         }
         if(node.value<this.value){
   
             if(this.left==null){
   
                 this.left=node;
             }else{
   
                 this.left.add(node);
             }
         }else {
   
             if(this.right==null){
   
                 this.right=node;
             }else {
   
                 this.right.add(node);
             }
         }
    }
    //中序遍历
    public void midOrder(){
   
         if(this.left!=null){
   
             this.left.midOrder();
         }
        System.out.println(this);
         if(this.right!=null){
   
             this.right.midOrder();
         }
    }

二叉排序树删除节点

思路:首先要保证能根据值找到那个要删除的节点和它的父节点。
分为5种情况:

  1. 要删除的值不存在,也就是目标节点为null,直接返回。
  2. 只有一个根节点的情况,直接root=null。
  3. 要删除的是叶子节点。需判断目标节点是父节点的左子节点还是右子节点,通过parent.left=null或parent.right=null删除。
  4. 删除有一颗子树的节点。首先判断父节点是否为空,如果为空,情况就是删除有一棵子树的根节点,直接让root=target.left或.right。如果父节点不为空,就要判断目标节点是父节点的左右子节点和目标节点的子树是左右子树,一共对应4种可能性。
  5. 删除有两棵子树的节点。寻找右子树的最小值或左子树的最大值,将该值赋给目标节点,并将那个最小值或最大值节点删除。
package binarySortTree;

/**
 * 二叉排序树
 */
public class BinarySortTreeDemo {
   
    public static void main(String[] args) {
   
        int[] num={
   7, 3};
        BinarySortTree binarySortTree = new BinarySortTree();
        for(int i:num){
   
            binarySortTree.add(new Node(i)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值