[算法]二叉搜索树中的插入操作

80 阅读1分钟

0x00 题目

给定二叉搜索树(BST)的根节点 root
和要插入树中的值 value
将值插入二叉搜索树
返回插入后二叉搜索树的根节点
输入数据保证
新值和原始二叉搜索树中的任意节点值都不同

注意,可能存在多种有效的插入方式
只要树在插入后仍保持为二叉搜索树即可
你可以返回任意有效的结果


0x01 思路

因为是二叉搜索树
对于任意节点 root 而言
左子树上所有节点的值均小于 root.val
右子树上所有节点的值均大于 root.val
且它们都是二叉搜索树

根据 valroot.val 的大小关系
可以确定要将 val 插入到哪个子树中

子树为空则插入新节点


0x02 解法

语言:Swift

树节点:TreeNode

public class TreeNode {
    public var val: Int
    public var left: TreeNode?
    public var right: TreeNode?
    public init() { self.val = 0; self.left = nil; self.right = nil; }
    public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
    public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
        self.val = val
        self.left = left
        self.right = right
    }
}

解法:

func insertIntoBST(_ root: TreeNode?, _ val: Int) -> TreeNode? {
    if root == nil { return TreeNode(val) }
    
    var node = root
    while node != nil {
        // 小于节点值
        if val < node!.val {
            if node!.left == nil {
                node!.left = TreeNode(val)
                break
            }else{
                node = node!.left
            }
        }
        // 大于节点值
        else{
            if node!.right == nil {
                node!.right = TreeNode(val)
                break
            }else{
                node = node!.right
            }
        }
    }
    
    return root
}

0x03 我的小作品

欢迎体验我的作品之一:小汉字-XHanzi
汉字书写入门,常用汉字 3800 个,二级字表 2200 个
App Store 搜索即可~