数据结构144-二叉搜索树-搜索特定值是否存在代码

简介: 数据结构144-二叉搜索树-搜索特定值是否存在代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>封装二叉搜索树</title>
  </head>
  <body>
    <script>
      function BinarySearchTree() {
        function Node(key) {
          this.key = null;
          this.left = null;
          this.right - null;
        }
        this.root = null;
        BinarySearchTree.prototype.insert = function (key) {
          var newNode = new Node(key);
          //判断节点是否有值
          if (this.root == null) {
            this.root = newNode;
          } else {
            this.insertNode(this.root, newNode);
          }
        };
        BinarySearchTree.prototype.insertNode = function (node, newNode) {
          if (newNode.key < node.key) {
            if (node.left == null) {
              node.left = newNode;
            } else {
              this.insertNode(node.left, newNode);
            }
          } else {
            if (node.right == null) {
              node.right = newNode;
            } else {
              this.insertNode(node.right, newNode);
            }
          }
        };
        //先序遍历
        BinarySearchTree.prototype.preOrderTraversal = function (handler) {
          this.preOrderTraversalNode(this.root, handler);
        };
        BinarySearchTree.prototype.preOrderTraversalNode = function (
          node,
          handler
        ) {
          if (node != null) {
            //处理经过的节点
            handler(node.key);
            this.preOrderTraversalNode(node.left, handler);
            this.preOrderTraversalNode(node.right, handler);
          }
        };
        //中序遍历
        BinarySearchTree.prototype.middleOrderTraversal = function (handler) {
          this.middleOrderTraversalNode(this.root, handler);
        };
        BinarySearchTree.prototype.middleOrderTraversalNode = function (
          node,
          handler
        ) {
          if (node != null) {
            //处理经过的节点
            handler(node.key);
            this.preOrderTraversalNode(node.left, handler);
            handler(node.key)
            this.preOrderTraversalNode(node.right, handler);
          }
        };
        //中序遍历
        BinarySearchTree.prototype.postOrderTraversal = function (handler) {
          this.postOrderTraversalNode(this.root, handler);
        };
        BinarySearchTree.prototype.postOrderTraversalNode = function (
          node,
          handler
        ) {
          if (node != null) {
            //处理经过的节点
            handler(node.key);
            this.postOrderTraversalNode(node.left, handler);
            this.postOrderTraversalNode(node.right, handler);
            handler(node.key)
          }
        };
        BinarySearchTree.prototype.max = function (){
            var node=this.root
            var key=null
            while(node!=null){
                key=node.key
                node=node.right
            }
            return key
        }
        BinarySearchTree.prototype.min = function (){
            var node=this.root
            var key=null
            while(node!=null){
                key=node.key
                node=node.left
            }
            return key
        }
        BinarySearchTree.prototype.search = function (){
            var node=this.root
            while(node!=key){
                if(key<node.key){
                    node=node.left
                }else if(key>node.key){
                    node=node.key
                }else{
                  return  true
                }
            }
            return false
        }
      }
    </script>
  </body>
</html>
相关文章
|
7月前
|
前端开发 Java
java实现队列数据结构代码详解
本文详细解析了Java中队列数据结构的实现,包括队列的基本概念、应用场景及代码实现。队列是一种遵循“先进先出”原则的线性结构,支持在队尾插入和队头删除操作。文章介绍了顺序队列与链式队列,并重点分析了循环队列的实现方式以解决溢出问题。通过具体代码示例(如`enqueue`入队和`dequeue`出队),展示了队列的操作逻辑,帮助读者深入理解其工作机制。
244 1
|
算法
数据结构之博弈树搜索(深度优先搜索)
本文介绍了使用深度优先搜索(DFS)算法在二叉树中执行遍历及构建链表的过程。首先定义了二叉树节点`TreeNode`和链表节点`ListNode`的结构体。通过递归函数`dfs`实现了二叉树的深度优先遍历,按预序(根、左、右)输出节点值。接着,通过`buildLinkedList`函数根据DFS遍历的顺序构建了一个单链表,展示了如何将树结构转换为线性结构。最后,讨论了此算法的优点,如实现简单和内存效率高,同时也指出了潜在的内存管理问题,并分析了算法的时间复杂度。
327 0
|
8月前
|
算法 Java
算法系列之数据结构-二叉搜索树
二叉查找树(Binary Search Tree,简称BST)是一种常用的数据结构,它能够高效地进行查找、插入和删除操作。二叉查找树的特点是,对于树中的每个节点,其左子树中的所有节点都小于该节点,而右子树中的所有节点都大于该节点。
328 22
|
8月前
|
C语言 C++ 容器
【数据结构】二叉搜索树(二叉排序树)
本文介绍了二叉搜索树(Binary Search Tree, BST)的定义、实现及其性能分析。二叉搜索树是一种特殊的二叉树,其特点是左子树所有节点值小于根节点值,右子树所有节点值大于根节点值,且每个子树也满足此特性。文中详细讲解了BST的节点结构、插入、查找、删除等操作的实现,并通过C++代码展示了这些功能。此外,还讨论了BST的性能:在理想情况下,时间复杂度接近O(logN),但在最坏情况下可能退化为O(N)。为了提高效率,后续将学习自平衡二叉搜索树如AVL树和红黑树。掌握BST有助于理解STL中的set和map容器。感谢阅读,欢迎点赞支持。
709 9
|
12月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
412 1
|
存储 Java 开发者
Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效
【10月更文挑战第19天】在软件开发中,随着项目复杂度的增加,数据结构的组织和管理变得至关重要。Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,帮助开发者告别混乱,提升代码质量。
144 1
|
存储 算法 索引
HashMap底层数据结构及其增put删remove查get方法的代码实现原理
HashMap 是基于数组 + 链表 + 红黑树实现的高效键值对存储结构。默认初始容量为16,负载因子为0.75。当存储元素超过容量 * 负载因子时,会进行扩容。HashMap 使用哈希算法计算键的索引位置,通过链表或红黑树解决哈希冲突,确保高效存取。插入、获取和删除操作的时间复杂度接近 O(1)。
298 0
05(数据结构考研)树相关操作代码
05(数据结构考研)树相关操作代码
84 0
|
算法
04(数据结构考研)串相关操作代码
04(数据结构考研)串相关操作代码
69 0
03(数据结构考研)队列相关操作代码
03(数据结构考研)队列相关操作代码
124 0

热门文章

最新文章

下一篇
oss云网关配置