JavaScript数据结构之二叉树的删除算法示例

 更新时间:2017年04月13日 09:53:38   作者:布瑞泽的童话  
这篇文章主要介绍了JavaScript数据结构之二叉树的删除算法,简单分析了javascript删除数据结构中二叉树节点时所遇到的各种情况与相关的处理原理与算法实现技巧,需要的朋友可以参考下

本文实例讲述了JavaScript数据结构之二叉树的删除算法。分享给大家供大家参考,具体如下:

从二叉查找树上删除节点的操作复杂程度取决于删除哪个节点。如果删除没有子节点的节点就非常简单,如果节点只有一个子节点,不管是左子节点还是右子节点,就变得稍微有点复杂,如果节点包含两个子节点就最复杂。

如果待删除节点是叶子节点,那么只需要将从父节点指向它的链接指向null

如果待删除节点只包含一个子节点,那么原本指向它的节点就得使其指向它的子节点

如果待删除节点包含两个子节点,那么我们可以采用两种方式,一种是查找待删除节点左子树上的最大值,一种是查找待删除节点右节点上的最小值。我们采取后者,找到最小值后,将临时节点上的值复制到待删除节点,然后再删除临时节点。

删除操作的代码如下:

function getSmallest(node){//查找最小节点
    while(node.left!=null){
      node=node.left;
    }
    return node;
}
function remove(data){
    root=removeNode(this.root,data);//将根节点转换
}
function removeNode(node,data){
    if(node==null){
      return null;
    }
    if(data==node.data){
      //如果没有子节点
      if(node.right==null&&node.left==null){
        return null;//直接将节点设为空
      }
      //如果没有左子节点
      if(node.left==null){
        return node.right;//直接指向其右节点
      }
      //如果没有右子节点
      if(node.right==null){
        return node.left;
      }
      //如果有两个节点
      if(node.right!=null&&node.left!=null){
        var tempNode=getSmallest(node.right);//找到最小的右节点
        node.data=tempNode.data;
        node.right=removeNode(node.right,tempNode.data);//依次寻找
        return node;
      }
    }else if(data<node.data){
      node.left=removeNode(node.left,data);
      return node;
    }else{
      node.right=removeNode(node.right,data);
      return node;
    }
}

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数据结构与算法技巧总结》、《JavaScript数学运算用法总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结

希望本文所述对大家JavaScript程序设计有所帮助。

相关文章

  • ES6中的WeakMap和WeakSet特性和用途详解

    ES6中的WeakMap和WeakSet特性和用途详解

    在JavaScript的ES6版本中,引入了WeakMap和WeakSet这两种新的数据结构,与Map和Set相比,它们有一些特殊的特点和用途,使它们在处理内存泄漏问题、管理对象私有数据、处理对象的唯一性等场景中有显著的优势,本文将深入探讨WeakMap和WeakSet的特性和用途,一起看看吧
    2023-12-12
  • JavaScript开发时的五个注意事项

    JavaScript开发时的五个注意事项

    JavaScript开发时的五个注意事项讲述了表单事件、链接、循环优化、匿名函数、字符串连接等优化技巧,需要的朋友可以参考一下
    2007-12-12
  • 如何解决js函数防抖、节流出现的问题

    如何解决js函数防抖、节流出现的问题

    这篇文章主要介绍了如何解决js函数防抖、节流出现的问题。SyntheticEvent对象是通过合并得到的。 这意味着在事件回调被调用后,SyntheticEvent 对象将被重用并且所有属性都将被取消。 因此,您无法以异步方式访问该事件。,需要的朋友可以参考下
    2019-06-06
  • 67 个节约开发时间的前端开发者的工具、库和资源

    67 个节约开发时间的前端开发者的工具、库和资源

    在本文中,我不会去谈 React、Angular、Vue 等等这些大的前端框架,也不会谈 Atom、VS code、Sublime 等等这些已经很出名的代码编辑器,我只是想简单的分享一套我认为有助于提升开发者工作流的工具集
    2017-09-09
  • JS实现对json对象排序并删除id相同项功能示例

    JS实现对json对象排序并删除id相同项功能示例

    这篇文章主要介绍了JS实现对json对象排序并删除id相同项功能,涉及javascript针对json格式数据的遍历、运算、判断、添加、删除等相关操作技巧,需要的朋友可以参考下
    2018-04-04
  • js实现表格字段排序

    js实现表格字段排序

    本篇文章只要是对js表格字段排序的实例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-02-02
  • Bootstrap carousel轮转图的使用实例详解

    Bootstrap carousel轮转图的使用实例详解

    图片轮播效果在Web中常常能看到,很多人也称之为幻灯片。这篇文章主要给大家介绍Bootstrap carousel轮转图的使用实例详解,需要的朋友可以参考下
    2016-05-05
  • JavaScript定义类的几种方式总结

    JavaScript定义类的几种方式总结

    本篇文章主要是对JavaScript定义类的几种方式进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • JS实现网页时钟特效

    JS实现网页时钟特效

    这篇文章主要为大家详细介绍了JS实现网页时钟特效,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • BootStrap轮播HTML代码(推荐)

    BootStrap轮播HTML代码(推荐)

    本文给大家分享bootstrap轮播h tml代码,代码简单易懂非常不错,具有参考借鉴,需要的朋友参考下吧
    2016-12-12

最新评论