IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 前端js与二叉树 -> 正文阅读

[数据结构与算法]前端js与二叉树

二叉排序树

(1) 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值(查找最小值就是查找最左的节点)
(2) 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值(查找最大值就是查找最右节点了)
(3) 它的左、右子树也分别为二叉查找树

function BinarySearchTree(keys){


  //Node构造函数
  let Node = function (key){
     this.key = key //值
     this.left = null//左值
     this.right = null//右值
  }

  let root = null

  let insertNode = (node,newNode)=>{
     if(newNode.key < node.key){//若是newNode的值大于跟节点node,就插入左边
       if(node.left === null){//若是左节点直接为空,就直接赋值为左节点
         node.left = newNode
       }else {
         insertNode(node.left,newNode)//若不是空,就继续插入到左节点处
       }
     }else {若是newNode的值小于跟节点node,就插入右边
       if (node.right === null) {
         node.right = newNode
       }else {
         insertNode(node.right,newNode)
       }
     }
  }

  this.insert = (key)=>{
     let newNode = new Node(key)//将数组传进来的值作为新值组成一个新的节点
     if (root === null) {//若是根节点为空
       root = newNode//新值为新节点
     }else {
       insertNode(root,newNode)//插入到遍历方法insertNode里面去
     }
  }
  
  keys.forEach((key)=>{
   this.insert(key)//遍历值,将值插入到root里面。
  })
  return root//返回二叉排序树
}


const keys = [8,3,10,1,6,14,4,7,13]
BinarySearchTree(keys)

中序遍历
左根右按顺序遍历

//在原来二叉树函数的基础上继续补充
    function BinaryTree(){
        // 中序遍历函数封装
        var inOrderTraverseNode = function(node,callback){//接收根节点的值和回调函数
            if(node !== null){  //若二叉树根节点不为空
                inOrderTraverseNode(node.left,callback);
                //先调用自身遍历左孩子
                
                callback(node.key);
                //输出当前的值(也就是左右根的 根 的值)
                
                inOrderTraverseNode(node.right,callback);
                //再调用自身遍历右孩子
            }
        }
        // 增加遍历的api接口
        this.inOrderTraverse = function(oRoot,callback){//后期调用
            inOrderTraverseNode(oRoot,callback);
         //接口内,调用中序遍历函数,并且传入当前的根节点的值和回调函数。传oRoot是因为要从根节点开始。
        }
    };

 
    var callback = function(key){// 增加遍历的自定义效果的回调函数
  
        console.log(key);//每次遍历后输出当前的遍历值。
    };
 
    binaryTree.inOrderTraverse(oRoot,callback);// 并且传入当前的根节点的值和回调函数 调用封装好的遍历方法api,以实现遍历二叉树的目标。

前序遍历
根左右按顺序遍历

后序遍历
左右根按顺序遍历

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:39:43  更:2022-03-03 16:44:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 15:35:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码