golang力扣leetcode 701. 二叉搜索树中的插入操作

简介: golang力扣leetcode 701. 二叉搜索树中的插入操作

题解

思路:找到最后一个叶子节点满足插入条件即可

代码

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

坑点

先看wa的代码

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func insertIntoBST(root *TreeNode, val int) *TreeNode {
  insert(root, val)
  return root
}
func insert(root *TreeNode, val int)*TreeNode {
  if root == nil {
    root = &TreeNode{
      Val:   val,
      Left:  nil,
      Right: nil,
    }
    return root
  }
  if root.Val > val {
    root.Left=insert(root.Left, val)
  } else {
    root.Right=insert(root.Right, val)
  }
    return root
}

分析

为什么传进去一个nil,我函数里不是创建了新的节点了吗?不是指针传递吗?思考一下,其实指针传递传递的是指针里面存的地址,只是把“nil”传给了“形参指针”,让形参指针存nil而已,形参指针和局部指针不是同一个,他们执行的地址是同一个。那么形参指针指向的地址变化了,和局部指针又有什么关系呢,局部指针依旧指向nil


目录
相关文章
|
1月前
|
程序员 C语言
【C语言】LeetCode(力扣)上经典题目
【C语言】LeetCode(力扣)上经典题目
|
1月前
【LeetCode 45】701.二叉搜索树中的插入操作
【LeetCode 45】701.二叉搜索树中的插入操作
9 1
|
1月前
【LeetCode 44】235.二叉搜索树的最近公共祖先
【LeetCode 44】235.二叉搜索树的最近公共祖先
16 1
|
1月前
【LeetCode 48】108.将有序数组转换为二叉搜索树
【LeetCode 48】108.将有序数组转换为二叉搜索树
38 0
|
1月前
【LeetCode 47】669.修剪二叉搜索树
【LeetCode 47】669.修剪二叉搜索树
9 0
|
1月前
【LeetCode 46】450.删除二叉搜索树的节点
【LeetCode 46】450.删除二叉搜索树的节点
15 0
|
1月前
【LeetCode 42】501.二叉搜索树中的众数
【LeetCode 42】501.二叉搜索树中的众数
8 0
|
1月前
【LeetCode 41】530.二叉搜索树的最小绝对差
【LeetCode 41】530.二叉搜索树的最小绝对差
11 0
|
1月前
【LeetCode 40】98.验证二叉搜索树
【LeetCode 40】98.验证二叉搜索树
11 0
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行