数据结构与算法-04二叉树-02

链表方式构建二叉搜索树

Binary Search Tree

  • 二叉树: 最多有两个子节点
  • 左小右大; BST的特点

在这里插入图片描述

构建节点

节点构成

一般节点有三部分构成:

  1. 节点的数据 val
  2. 节点的左子节点 left
  3. 节点的右子节点 right
image-20241129162834459

节点实现

public class TreeNode {
    public int val;
    public TreeNode left;
    public TreeNode right;

    public TreeNode(int val) {
        this.val = val;
    }

    public TreeNode(int val, TreeNode left, TreeNode right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }

    @Override
    public String toString() {
        return "TreeNode{" +
                "val=" + val +
                ", left=" + left +
                ", right=" + right +
                '}';
    }
}

添加节点(链表)

循环方式构建

  • 如果无根节点,新节点就是根节点。
  • 与节点的左、右节点值比较。
 public void insert(int val) {
        TreeNode newNode = new TreeNode(val);

        if(root == null) {
            root = newNode;
            return;
        }
        TreeNode curr = root;
        while (curr != null) {
            if (val > curr.val) {
                if (curr.right == null) {
                    curr.right = newNode;
                    return;
                }
                curr = curr.right;
            } else {
                if (curr.left == null) {
                    curr.left = newNode;
                    return;
                }
                curr = curr.left;
            }
        }
    }

递归方式构建

public TreeNode insert(TreeNode root, int val) {
    TreeNode newNode = new TreeNode(val);
    if (root == null) {
        root = newNode;
        return root;
    }
    if (val > root.val) {
        root.right = insert(root.right, val);
    }
    if (val < root.val) {
        root.left = insert(root.left, val);
    }
    return root;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值