算法训练营day19,二叉树8-2

type TreeNode struct {

  Val   int

  Left  *TreeNode

  Right *TreeNode

}

450. 删除二叉搜索树中的节点

/*本题比较难,删除节点要分五种情况考虑

1.没有找到要删除的节点

2.找到要删除的节点是叶子节点

3.找到要删除的节点,左指针不为空,右指针为空

4.找到要删除的节点,左指针为空,右指针不为空

5.找到要删除的节点,左指针不为空,右指针不为空,这种情况最复杂,需要调整二叉树结构,既可以让左子树继承,也可以让右子树继承

*/

//根据上述分析,第五点让右子树继承写法

func deleteNode(root *TreeNode, key int) *TreeNode {

//1.未找到要删除的节点

  if root == nil {

    return root

  }

  if root.Val == key {

      //2.找到要删除的节点是叶子节点

    if root.Right == nil && root.Left == nil {

      return nil

  // 3.找到要删除的节点,左指针不为空,右指针为空

    } else if root.Left != nil && root.Right == nil {

      return root.Left

//4.找到要删除的节点,左指针为空,右指针不为空

    } else if root.Left == nil && root.Right != nil {

      return root.Right

    } else {

     //5.找到要删除的节点,左指针不为空,右指针不为空,让右子树继承

      cur := root.Right

      for cur.Left != nil {

        cur = cur.Left

      }

      cur.Left = root.Left

      return root.Right

    }

 //因为是而二叉搜索树key比root值小,向左递归

  } else if key < root.Val {

    root.Left = deleteNode(root.Left, key)

//比root值大向右递归

  } else if key > root.Val {

    root.Right = deleteNode(root.Right, key)

  }

  return root

}

//第五点让左子树继承写法

func deleteNode(root *TreeNode, key int) *TreeNode {

  if root == nil {

    return root

  }

  if root.Val == key {

    if root.Right == nil && root.Left == nil {

      return nil

    } else if root.Left != nil && root.Right != nil {

      cur := root.Left

      for cur.Right != nil {

        cur = cur.Right

      }

      cur.Right = root.Right

      return root.Left

    } else if root.Left != nil {

      return root.Left

    } else {

      return root.Right

    }

  } else if key < root.Val {

    root.Left = deleteNode(root.Left, key)

  } else if key > root.Val {

    root.Right = deleteNode(root.Right, key)

  }

  return root

}

相关推荐

  1. 算法训练day19,8-2

    2024-02-01 16:32:02       58 阅读
  2. 算法训练Day15()

    2024-02-01 16:32:02       61 阅读
  3. 算法训练Day14()

    2024-02-01 16:32:02       76 阅读
  4. 算法训练 day14 part02

    2024-02-01 16:32:02       27 阅读
  5. 的遍历——代码随想录算法训练Day14

    2024-02-01 16:32:02       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-01 16:32:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-01 16:32:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-01 16:32:02       87 阅读
  4. Python语言-面向对象

    2024-02-01 16:32:02       96 阅读

热门阅读

  1. postgresql和kingbase关于模糊查询大小写兼容问题

    2024-02-01 16:32:02       42 阅读
  2. 深度学习的进展

    2024-02-01 16:32:02       55 阅读
  3. 地毯进口报关全攻略:如何高效通关

    2024-02-01 16:32:02       52 阅读
  4. element plus dialog滚动条置顶问题

    2024-02-01 16:32:02       50 阅读
  5. 微任务与宏任务

    2024-02-01 16:32:02       47 阅读
  6. Oracle 11g集群安装(一):CentOS7系统环境配置

    2024-02-01 16:32:02       37 阅读
  7. Qt程序设计-U盘检测(Linux系统)

    2024-02-01 16:32:02       45 阅读
  8. 快速掌握WebSocket:仅需10分钟的速成教程!

    2024-02-01 16:32:02       52 阅读