leetcode中等450删除二叉搜索树中的节点 / 701二叉搜索树中的插入操作
Posted qq_40707462
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode中等450删除二叉搜索树中的节点 / 701二叉搜索树中的插入操作相关的知识,希望对你有一定的参考价值。
450、删除二叉搜索树中的节点
思路:
public TreeNode deleteNode(TreeNode root, int key) {
if(root==null) return null;
if(root.val==key){
单层逻辑
}
if(root.val>key) root.left=deleteNode(root.left,key);
if(root.val<key) root.right=deleteNode(root.right,key);
return root;
}
递三步:
①终止条件
②单层逻辑
③处理左右
每一层有以下五种情况:
- 第一种情况:没找到删除的节点,遍历到空节点直接返回了 找到删除的节点
- 第二种情况:左右孩子都为空(叶子节点),直接删除节点, 返回NULL为根节点
- 第三种情况:删除节点的左孩子为空,右孩子不为空,删除节点,右孩子补位,返回右孩子为根节点
- 第四种情况:删除节点的右孩子为空,左孩子不为空,删除节点,左孩子补位,返回左孩子为根节点
- 第五种情况:左右孩子节点都不为空,则将删除节点的左孩子,放到删除节点的右子树的 最左面节点 的左孩子上,返回删除节点右孩子为新的根节点。
eg 5放在8下,9接替7的位置
class Solution {
public TreeNode deleteNode(TreeNode root, int key) {
if(root==null) return null;//一
if(root.val==key){
//二三四
if(root.left==null) return root.right;
else if(root.right==null) return root.left;
//五,都不为空
else{
TreeNode node=root.right;//找到右子树最左边的节点
while(node.left!=null) node=node.left;
node.left=root.left;//root的左节点搬下来
root=root.right;//替换root
return root;
}
}
if(root.val>key) root.left=deleteNode(root.left,key);
if(root.val<key) root.right=deleteNode(root.right,key);
return root;
}
}
701、二叉搜索树中的插入操作
给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。
注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。
注意!!一定可以插在树的叶子上
class Solution {
public TreeNode insertIntoBST(TreeNode root, int val) {
//一定可以插在树的叶子上
if(root==null){
TreeNode node=new TreeNode(val);
return node;
}
if(root.val>val) root.left=insertIntoBST(root.left,val);
if(root.val<val) root.right=insertIntoBST(root.right,val);
return root;
}
}
以上是关于leetcode中等450删除二叉搜索树中的节点 / 701二叉搜索树中的插入操作的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode Java刷题笔记— 450. 删除二叉搜索树中的节点
[JavaScript 刷题] 树 - 删除二叉搜索树中的节点, leetcode 450
[JavaScript 刷题] 树 - 删除二叉搜索树中的节点, leetcode 450
LeetCode 二叉树专项删除二叉搜索树中的节点(450)