首页 > 编程语言 >2.手写JavaScript广度和深度优先遍历二叉树

2.手写JavaScript广度和深度优先遍历二叉树

时间:2024-04-06 21:59:23浏览次数:28  
标签:rightChild 遍历 target val JavaScript leftChild 二叉树 数组

一、核心思想:

1.深度遍历:

依靠栈先进后出的机制,分别设置返回结果的数组和栈数组,首先判断栈非空,对每个结点,将其出栈并把值push到结果数组,判断是否有右左孩子,分别将其加入栈中,循环执行上述操作。否则返回结果数组。

2.广度遍历:

依靠队列先进先出的机制,分别设置返回结果的数组和队列数组,首先判断队列非空,对每个结点,将其出队列并把值push到结果数组,判断是否有左右孩子,分别将其加入队列中,循环执行上述操作。否则返回结果数组。

二、代码实现:

1.深度遍历:

let tree = {
  val: 1,
  leftChild: {
    val: 2,
    leftChild: {
      val: 3,
      leftChild: {
        val: 4,
      },
      rightChild: {
        val: 5,
      },
    },
    rightChild: {
      val: 6,
    },
  },
  rightChild: {
    val: 7,
    leftChild: {
      val: 8,
    },
    rightChild: {
      val: 9,
      leftChild: {
        val: 10,
      },
    },
  },
};
/**
 * 深度遍历二叉树
 * @param {Array} root 传入数组
 * @return {Array} 返回深度遍历二叉树数组结果
 */
function deepTree(root) {
  let list = [],
  stack = [root];
  while (stack.length) {
    let target;
    target = stack.pop();
    list.push(target.val)
    if (target.rightChild) {
      stack.push(target.rightChild)
    }
    if (target.leftChild) {
      stack.push(target.leftChild)
    }
  }
  return list
}
console.log(deepTree(tree));
// [
//   1, 2, 3, 4,  5,
//   6, 7, 8, 9, 10
// ]

2.广度遍历

let tree = {
  val: 1,
  leftChild: {
    val: 2,
    leftChild: {
      val: 3,
      leftChild: {
        val: 4,
      },
      rightChild: {
        val: 5,
      },
    },
    rightChild: {
      val: 6,
    },
  },
  rightChild: {
    val: 7,
    leftChild: {
      val: 8,
    },
    rightChild: {
      val: 9,
      leftChild: {
        val: 10,
      },
    },
  },
};
/**
 * 广度遍历二叉树
 * @param {Array} root 传入数组
 * @return {Array} list 返回深度遍历二叉树数组结果
 */
function broadTree(root) {
  let list = [],
    queue = [root];
  while (queue.length) {
    let target = queue.shift();
    list.push(target.val);
    if (target.leftChild) {
      queue.push(target.leftChild);
    }
    if (target.rightChild) {
      queue.push(target.rightChild);
    }
  }
  return list;
}
console.log(broadTree(tree))
// [
//   1, 2, 7, 3,  6,
//   8, 9, 4, 5, 10
// ]

标签:rightChild,遍历,target,val,JavaScript,leftChild,二叉树,数组
From: https://blog.csdn.net/g841805/article/details/137434636

相关文章

  • JavaScript入门
    什么是JavaScript?JavaScript是一门跨平台、面向对象的脚本语言。是用来控制网页行为的,它能使网页可交互。(脚本语言:能直接通过浏览器的解释就可以运行,不用像Java那样需要虚拟机编译运行)JavaScript和Java时完全不同的语言,不论是概念设计。但是基础语法类似。JavaScript的引入方......
  • 17天【代码随想录算法训练营34期】第六章 二叉树part04(● 110.平衡二叉树 ● 257.
    110.平衡二叉树#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclassSolution:defgetDepth(self,root):......
  • 101. 对称二叉树
    兄弟们今天又来刷题了,题目:.-力扣(LeetCode)刚开始看到这个题其实就觉得和那个判断二叉树是否相等的题很相似,于是就照着那题的思路想,可是后来发现此题给的接口函数只有一个参数,没办法写,于是我们可以自己写一个接口函数来完成。思路:我们可以将这棵树看成把根节点删除的左右......
  • 二叉树-递归遍历
    深度优先遍历先往深走,遇到叶子结点再往回走,分为前序遍历,中序遍历和后序遍历。方法有递归法和迭代法。前中后序遍历,指的是中间节点的遍历顺序。前序遍历:5412678中左右中序遍历:1425768左中右后序遍历:1247865左右中深度优先遍历可利用递归法或者迭代法实......
  • 16天【代码随想录算法训练营34期】第六章 二叉树part03(● 104.二叉树的最大深度 559
    104.二叉树的最大深度#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclassSolution:defmaxDepth(self,root:O......
  • LC 226.翻转二叉树
    226.翻转二叉树给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。示例1:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root=[2,1,3]输出:[2,3,1]示例3:输入:root=[]输出:[]提示:树中节点数目范围在[0,100]内......
  • 代码随想录算法训练营DAY18|C++二叉树Part.5|513.找树左下角的值、112. 路径总和、113
    文章目录513.找树左下角的值层序-迭代遍历前中后序-递归遍历思路伪代码CPP代码112.路径总和、113.路径总和II112.路径总和思路伪代码实现CPP代码113.路径总和II思路伪代码实现CPP代码实现106\105.从中(前)序与后(中)序遍历序列构造二叉树106.从中序与后序遍历序列......
  • 在 JavaScript 中,exec() 和 match() 区别
    在JavaScript中,exec() 和 match() 都是与正则表达式相关的常用方法,但它们的使用方式和返回的结果有所不同。exec() 方法exec() 是 RegExp 对象的一个方法,用于在字符串中执行一次正则表达式匹配。它的语法是:regexp.exec(string)其中 regexp 是一个正则表达式对象,s......
  • 初识JavaScript
    目录前言:1.认识JavaScript:1.1网页的动态效果:1.2 前后端交互--数据提交(弹窗/输入/事件监听):1.3进阶--前端高级框架: 1.3.1Vue.js:1.3.2React.js:1.3.3Node.js:1.3.4Three.js:2.JavaScript的基本输入输出: 2.1注释:2.1.1单行注释:2.1.1多行注释:2.2输出语句:2......
  • 数据结构 第五章(树和二叉树)【下】
    写在前面:本系列笔记主要以《数据结构(C语言版)》为参考(本章部分图片以及知识点整理来源于王道),结合下方视频教程对数据结构的相关知识点进行梳理。所有代码块使用的都是C语言,如有错误欢迎指出。视频链接:第01周a--前言_哔哩哔哩_bilibili哈夫曼树部分的代码参考了一位小伙伴分享的......