首页 > 其他分享 >二叉树

二叉树

时间:2024-04-03 18:44:06浏览次数:16  
标签:node right return callback 二叉树 key null

<!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>Document</title> </head> <body>
    <script>
        const Compare = {             less:-1,             bigger:1,             equ:0         }
        class Node{
                        constructor(key){                 this.key = key                 this.left = null                 this.right = null             }         }
        class BST {             constructor(){                 this.root = null             }
            compareFn(a,b){                 if(a ===  b) {                     return Compare.equ                 }                 return a < b ? Compare.less : Compare.bigger             }
            insert(key){                 if(this.root == null){                     this.root = new Node(key)                 } else {                     this.insertNode(this.root,key)                 }             }
            insertNode(node,key){                 if(this.compareFn(key,node.key) === Compare.less) {                     if(node.left == null) {                         node.left = new Node(key)                     } else {                         this.insertNode(node.left,key)                     }                 } else {                     if(node.right == null) {                         node.right = new Node(key)                     } else {                         this.insertNode(node.right,key)                     }                 }             }

            // 中序遍历             inOrderMap(callback){                 this.inOrderMapNode(this.root,callback)             }
            inOrderMapNode(node,callback){                 if(node != null){                     this.inOrderMapNode(node.left,callback)                     callback(node.key)                     this.inOrderMapNode(node.right,callback)                   }             }

            // 先序遍历             preOrderMap(callback){                 this.preOrderMapNode(this.root,callback)             }
            preOrderMapNode(node,callback){                 if(node != null){                     callback(node.key)                     this.preOrderMapNode(node.left,callback)                     this.preOrderMapNode(node.right,callback)                   }             }
            // 后序遍历             postOrderMap(callback){                 this.postOrderMapNode(this.root,callback)             }
            postOrderMapNode(node,callback){                 if(node != null){                     this.postOrderMapNode(node.left,callback)                     this.postOrderMapNode(node.right,callback)                     callback(node.key)                 }             }

            // 查找最小值             min(){                 return this.minNode(this.root)             }
            minNode(node){                 let current = node                 while(current != null && current.left  != null){                     current = current.left                 }                 return current             }
            // 查找最大值             max(){                 return this.maxNode(this.root)             }
            maxNode(node){                 let current = node                 while(current != null && current.right  != null){                     current = current.right                 }                 return current             }
            // 查询             search(key){                return this.searchNode(this.root, key)             }
            searchNode(node,key){                 if(node === null){                     return false                 }                   if(this.compareFn(key,node.key) === Compare.less){                     return this.searchNode(node.left,key)                   } else if(this.compareFn(key,node.key) === Compare.bigger){                     return this.searchNode(node.right,key)                   } else {                     return true                 }             }
            remove(key){                 this.root = this.removeNode(this.root,key)             }
            removeNode(node,key){                 if(node == null) {                     return null                 }
                if(this.compareFn(key,node.key) === Compare.less){                     node.left = this.removeNode(node.left,key)                     return node                 } else if(this.compareFn(key,node.key) === Compare.bigger){                     node.right = this.removeNode(node.right,key)                     return node                 } else {                     if(node.left == null && node.right == null) {                         node = null                         return node                     }
                    if(node.left == null){                         node = node.right                         return node                     } else if(node.right == null) {                         node = node.left                         return node                     }
                    //找到最小的                     const target = this.minNode(node.right)                     node.key = target.key
                    node.right = this.removeNode(node.right,target.key)                     return node
                }             }           }

        var mytree = new BST();         mytree.insert(3)         mytree.insert(2)         mytree.insert(5)         mytree.insert(4)         mytree.insert(6)         // mytree.insert(90)         // mytree.insert(110)         // mytree.insert(150)         console.log(mytree)
        // mytree.inOrderMap(value=>{         //     console.log(value)         // })           // mytree.preOrderMap(value=>{         //     console.log(value)         // })           // mytree.postOrderMap(value=>{         //     console.log(value)         // })                 // console.log(mytree.min())         // console.log(mytree.max())         console.log(mytree.search(1110))
    </script> </body> </html>

标签:node,right,return,callback,二叉树,key,null
From: https://www.cnblogs.com/eric-share/p/18113345

相关文章

  • LeetCode-1379. 找出克隆二叉树中的相同节点【树 深度优先搜索 广度优先搜索 二叉树】
    LeetCode-1379.找出克隆二叉树中的相同节点【树深度优先搜索广度优先搜索二叉树】题目描述:解题思路一:递归,由于我们比较的是节点而不是节点值(例如C++比较的是地址),所以下面的代码也适用于树中有值相同节点的情况(本题的进阶问题)。解题思路二:递归这题有几个关键点,一:判......
  • 15天【代码随想录算法训练营34期】第六章 二叉树 part02(● 层序遍历 10 ● 226.翻
    层序遍历10102.二叉树的层序遍历(opensnewwindow)#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclassSolution......
  • 深入理解数据结构第二弹——二叉树(2)——堆排序及其时间复杂度
    看这篇前请先把我上一篇了解一下:深入理解数据结构第一弹——二叉树(1)——堆-CSDN博客前言:相信很多学习数据结构的人,都会遇到一种情况,就是明明最一开始学习就学习了时间复杂度,但是在后期自己写的程序或者是做到哪个需要判断时间复杂度的题时,仍然判断不出来时间复杂度是多少,今......
  • 代码随想录算法训练营第14天 | 二叉树 | 二叉树的遍历 | 迭代遍历 |统一风格的迭代(待
    理论基础二叉树的存储方式:可以链式也可以顺序用数组顺序存储二叉树的遍历递归遍历递归算法三要素确定递归函数的参数和返回值确定终止条件确定单层递归的逻辑风格不统一的迭代遍历(前后和中序的不同)前序遍历(根左右)//递归版voidtraversal(TreeNode*......
  • 代码随想录算法训练营DAY14|C++二叉树Part.1|二叉树的递归遍历、二叉树的迭代遍历、二
    文章目录二叉树的递归遍历思路CPP代码二叉树的迭代遍历思路前序遍历后序遍历后序遍历二叉树的统一迭代法二叉树的递归遍历144.二叉树的前序遍历、145.二叉树的后序遍历、94.二叉树的中序遍历文章讲解:二叉树的递归遍历视频讲解:每次写递归都要靠直觉?这次带你学......
  • 数据结构之二叉树和平衡二叉树
    1、二叉树:packagecom.datastructure.tree;//一个常用的第三方库是ApacheCommonsCollections,它提供了一个名为BinaryTree的类,用于表示二叉树。//可以使用org.apache.commons.collections4.BinaryTree类创建二叉树和进行操作。//可以在Maven中添加以下依赖项://<dependenc......
  • 14天【代码随想录算法训练营34期】 第六章 二叉树part01(● 理论基础 ● 递归遍历 ●
    理论基础种类满二叉树:k是深度,node数为2^k-1完全二叉树:二叉树底部是从左向右持续的二叉搜索树:左边节点都小于中间节点,右边节点都大于中间节点平衡二叉树AVL:左边和右边高度相差不超过1存储方式链式存储:leftchildptr,rightchildptr线式存储:字符数组保存,2i+1是左孩......
  • 对二叉树深度优先遍历php算法实现的改进(先序遍历,中序遍历,后序遍历)
        树是一种数据结构,二叉树是一种特殊的树。二叉树的特点是每个结点最多有两个儿子。以某种特定顺序访问树中所有的节点称为树的遍历,今天在查看了这遍文章:https://www.cnblogs.com/ivy-zheng/p/10995492.html 中对树的遍历的实现之后我对其PHP遍历算法代码进行了重构,这次......
  • 二叉树结点关键字输出的递归算法实现
    在计算机科学中,二叉树是一种重要的数据结构,广泛应用于各种算法和程序设计中。二叉树的遍历是二叉树操作中的基础问题之一,其目的是以某种规则访问二叉树的每个结点,使得每个结点被且仅被访问一次。给定一个具有n个结点的二叉树,我们需要编写一个递归过程,以O(n)的时间复杂度输出......
  • 基于栈结构的非递归二叉树结点关键字输出算法
    基于栈结构的非递归二叉树结点关键字输出算法一、引言二、二叉树基本概念三、非递归遍历算法基础四、算法设计五、算法实现六、C代码示例七、算法分析八、优化与讨论一、引言在计算机科学中,二叉树是一种重要的数据结构,它广泛应用于各种算法和数据结构中。对于二叉树......