BST插入

一句话说明

BST 插入就是先找到空位,再把新节点挂上去。

(附件 binary-search.gif 未随站点发布)

Go 代码:递归

func insertIntoBST(root *TreeNode, val int) *TreeNode {
    if root == nil {
        return &TreeNode{Val: val}
    }
    if val < root.Val {
        root.Left = insertIntoBST(root.Left, val)
    } else if val > root.Val {
        root.Right = insertIntoBST(root.Right, val)
    }
    return root
}

Go 代码:迭代

func insertIntoBSTIterative(root *TreeNode, val int) *TreeNode {
    if root == nil {
        return &TreeNode{Val: val}
    }
 
    cur := root
    for {
        if val < cur.Val {
            if cur.Left == nil {
                cur.Left = &TreeNode{Val: val}
                break
            }
            cur = cur.Left
            continue
        }
        if val > cur.Val {
            if cur.Right == nil {
                cur.Right = &TreeNode{Val: val}
                break
            }
            cur = cur.Right
            continue
        }
        break
    }
 
    return root
}

易错点

递归版一定要把返回值接回父节点

空树插入时,新节点本身就是根。

相关主题


返回:树算法 | 算法学习导航