450. 删除二叉搜索树中的节点
Posted 易小顺
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了450. 删除二叉搜索树中的节点相关的知识,希望对你有一定的参考价值。
算法记录
LeetCode 题目:
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。
说明
一、题目
一般来说,删除节点可分为两个步骤:
首先找到需要删除的节点;
如果找到了,删除它。
二、分析
- 按照调转前驱或者是后继的方式进行删除,分清楚三个出度的判断情况,其中的零个或一个可以进行一次合并。
class Solution
public TreeNode getPrevious(TreeNode root)
TreeNode temp = root.left;
while(temp.right != null) temp = temp.right;
return temp;
public TreeNode getNext(TreeNode root)
TreeNode temp = root.right;
while(temp.left != null) temp = temp.left;
return temp;
public TreeNode deleteNode(TreeNode root, int key)
if(root == null) return null;
if(root.val > key)
root.left = deleteNode(root.left, key);
else if(root.val < key)
root.right = deleteNode(root.right, key);
else
if(root.left == null || root.right == null)
TreeNode temp = root.left == null ? root.right : root.left;
return temp;
else
TreeNode temp = getNext(root);
root.val = temp.val;
root.right = deleteNode(root.right, temp.val);
return root;
总结
熟悉二叉搜索的性质删除特性。
以上是关于450. 删除二叉搜索树中的节点的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode Java刷题笔记— 450. 删除二叉搜索树中的节点
LeetCode 二叉树专项删除二叉搜索树中的节点(450)