zoukankan      html  css  js  c++  java
  • Leecode no.450 删除二叉搜索树中的节点

    package tree;

    import sun.reflect.generics.tree.Tree;

    import java.util.ArrayList;
    import java.util.List;

    /**
    * 450. 删除二叉搜索树中的节点
    * 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。
    *
    * 一般来说,删除节点可分为两个步骤:
    *
    * 首先找到需要删除的节点;
    * 如果找到了,删除它。
    *
    *
    * @author Tang
    * @date 2021/7/27
    */
    public class DeleteNode {

    List<TreeNode> list = new ArrayList<>();

    public TreeNode deleteNode(TreeNode root, int key) {
    if(root == null){
    return null;
    }
    //中序遍历将各节点顺序加入到链表
    midSearch(root);
    //干掉key相等的节点
    TreeNode temp = null;
    for (TreeNode node : list) {
    if(node.val == key){
    temp = node;
    }
    }
    if(temp != null){
    list.remove(temp);
    }
    //重新构造二叉搜索树
    return preSearch(list);
    }

    /**
    * 中序遍历,将所有节点顺序加入链表
    *
    */
    public void midSearch(TreeNode root) {
    if(root == null){
    return;
    }
    midSearch(root.left);
    list.add(root);
    midSearch(root.right);
    }

    /**
    * 前序遍历,将链表重新构造成一棵二叉搜索树
    */
    public TreeNode preSearch(List<TreeNode> list){
    if(list == null || list.size() == 0){
    return null;
    }
    int mid = list.size() / 2;
    TreeNode node = list.get(mid);
    node.left = preSearch(list.subList(0, mid));
    node.right = preSearch(list.subList(mid+1, list.size()));
    return node;
    }


    public static void main(String[] args) {
    TreeNode node1 = new TreeNode(5);
    TreeNode node2 = new TreeNode(3);
    TreeNode node3 = new TreeNode(6);
    TreeNode node4 = new TreeNode(2);
    TreeNode node5 = new TreeNode(4);
    TreeNode node6 = new TreeNode(7);
    node1.left = node2;
    node1.right = node3;
    node2.left = node4;
    node2.right = node5;
    node3.right = node6;
    new DeleteNode().deleteNode(node1, 3);


    }


    }
  • 相关阅读:
    RedHat Linux-配置YUM仓库
    04、管道符、重定向与环境变量
    03、新手必须掌握的Linux命令
    size_t
    decltype关键字
    python numpy使用笔记
    Huffman编码
    动态规划(dynamic programming)
    Prim算法
    Kruskal算法
  • 原文地址:https://www.cnblogs.com/ttaall/p/15065821.html
Copyright © 2011-2022 走看看