二叉树变量只是一个地址

public static void main(String[] args) {
TreeNode t = new TreeNode(3);
help(t);
System.out.println(t.val);
}
public static void help(TreeNode t)
{
t.val = 6;
}

上边代码通过地址改变了二叉树,输出为6,但是下边代码却只是传入函数的二叉树变量指向了另一个地址,外界的二叉树变量和二叉树的值没有变,输出还是3

public static void main(String[] args) {
TreeNode t = new TreeNode(3);
help(t);
System.out.println(t.val);
}
public static void help(TreeNode t)
{
t = new TreeNode6);
}

所以想改变二叉树,不能改变二叉树变量,而应该通过二叉树变量t调用val,left,right进行赋值,就可以改变,直接改变t只是让t指向另一课树,原本的树没有改变。

下边是答案,思路是先找到节点,再根据节点的不同情况进行操作。

最后的操作很乱,自己都看不下去了,应该递归的改变左右子树,但是眼睛太累了,有空再改吧。

public TreeNode deleteNode(TreeNode root, int key) {
if(root==null) return null;
if(root.val==key)
{
if (root.left==null) return root.right;
if (root.right==null) return root.left;
TreeNode temp = root.right;
while (temp.left!=null) temp = temp.left;
if (root.left.right!=null) temp.left = root.left.right;
root.left.right = root.right;
root.val = root.left.val;
if (root.left.left==null)
{
root.right = root.left.right;
root.left = null;
}
else {
//这里注意,由于两句话都要用到root.left,所以root.left最后再变
root.right = root.left.right;
root.left = root.left.left;
}
}
else
{
if(root.val>key) root.left = deleteNode(root.left,key);
else root.right = deleteNode(root.right,key);
}
return root;
}

[leetcode]450. Delete Node in a BST二叉搜索树删除节点的更多相关文章

  1. [LeetCode] 450. Delete Node in a BST 删除二叉搜索树中的节点

    Given a root node reference of a BST and a key, delete the node with the given key in the BST. Retur ...

  2. [Leetcode]450. Delete Node in a BST

    Given a root node reference of a BST and a key, delete the node with the given key in the BST. Retur ...

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

    删除二叉搜索树的节点 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引用. 一般来 ...

  4. LeetCode初级算法--树02:验证二叉搜索树

    LeetCode初级算法--树02:验证二叉搜索树 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...

  5. 数据结构中很常见的各种树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)

    数据结构中常见的树(BST二叉搜索树.AVL平衡二叉树.RBT红黑树.B-树.B+树.B*树) 二叉排序树.平衡树.红黑树 红黑树----第四篇:一步一图一代码,一定要让你真正彻底明白红黑树 --- ...

  6. 二叉搜索树的结构(30 分) PTA 模拟+字符串处理 二叉搜索树的节点插入和非递归遍历

    二叉搜索树的结构(30 分) PTA 模拟+字符串处理 二叉搜索树的节点插入和非递归遍历   二叉搜索树的结构(30 分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则 ...

  7. [LeetCode] Kth Smallest Element in a BST 二叉搜索树中的第K小的元素

    Given a binary search tree, write a function kthSmallest to find the kth smallest element in it. Not ...

  8. [LeetCode] Serialize and Deserialize BST 二叉搜索树的序列化和去序列化

    Serialization is the process of converting a data structure or object into a sequence of bits so tha ...

  9. [LeetCode] Minimum Absolute Difference in BST 二叉搜索树的最小绝对差

    Given a binary search tree with non-negative values, find the minimum absolute difference between va ...

随机推荐

  1. 【刷题笔记】DP优化-状压

    因为篇幅太长翻着麻烦,计划把DP拆成几个小专题,这里原文只留下状压,其他请至后续博文. 状态压缩优化 所谓状态压缩,就是将原本需要很多很多维来描述,甚至暴力根本描述不清的状态压缩成一维来描述. 时间复 ...

  2. Django----Serializer序列化

    serializer的两大特征 1.校检数据 2.序列化 首先创建apps/Serializer.py 在序列化里面导包 from rest_framework import serializers ...

  3. k8s 部署 Java 项目

    前几天安装了 k8s 并测试了自动伸缩功能(HPA),今天来部署一个简单的 Java 应用到 k8s. 开始之前需要先安装一下 ingress 插件.ingress 作为 k8s 的流量入口,有多种实 ...

  4. 七. Vue Router详解

    1. 认识路由 1.1 路由概念 路由是什么? 路由是一个网络工程里面的术语. 路由(routing)就是通过互联的网络把信息从源地址传输到目的地址的活动 --- 维基百科 路由器提供了两种机制:路由 ...

  5. PyQt(Python+Qt)学习随笔:树型部件QTreeWidget的itemAbove、itemBelow方法作用探究

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QTreeWidget的方法中,对于itemBelow.itemAbove方法,官网文档介绍非常简 ...

  6. 课堂练习之疫情APP

    title: 课堂练习之疫情查询APP date: 2020-03-17 20:08:51 tags: 在之前的体温记录APP上改进,只写出疫情信息查询页面的代码. 实体类与上篇博客SSM整合中的Ci ...

  7. espcms代码审计(二次urldecode注入分析)

    这里提到的漏洞是二次urldecode注入 这里用到的还是espcms,不过版本应该跟之前的有所不同,在网上找到的espcms源代码都是已经修补了这个漏洞的,我们对比分析吧 先放上漏洞位置代码,也就是 ...

  8. flask中的重定向,渲染,反转视图函数

    在学习flask中,重定向,渲染,反转老是不怎么明白,今天明白了其中的点了,来给大家分享下 rend_templete()这个函数就是一个渲染的作用,渲染html的东西. url_for是反转视图函数 ...

  9. google colab 杂谈

    需要一个GPU服务器,找到了免费的Google Colab 一.切换tensorflow版本: %tensorflow_version 1.x import tensorflow as tf tf._ ...

  10. 软工项目WordCount

    1.Github项目地址:https://github.com/JameMo/WordCount-for-C        2.在程序的各个模块的开发上耗费的时间: PSP2.1 Personal S ...