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 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Javascript之“树“ -> 正文阅读

[数据结构与算法]Javascript之“树“

一种分层数据的模型
前端工作中常见包括:DOM树,级联选择,树形控件
JS中没有树,但是可以用Object和Array构建树
树的常用操作:深度/广度优先遍历,先中后序遍历

1. 常用操作

DFS实现
  • 访问根节点
  • 对根节点的children挨个进行深度优先遍历
const tree = {
  val: 'a',
  children: [
    {
      val: 'b',
      children: [
        {
          val: 'c',
          children: []
        },
        {
          val: 'd',
          children: []
        }
      ]
    },
    {
      val: 'e',
      children: [
        {
          val: 'f',
          children: []
        },
        {
          val: 'g',
          children: []
        }
      ]
    }
  ]
}

const dfs = (root) => {
	console.log(root.val)
	root.children.forEach(dfs)
}
dfs(tree)
BFS实现
  • 新建一个队列,把根节点入队
  • 把对头出队并访问
  • 把对头的children挨个入队
  • 重复第二三步,直到队列为空
const tree = {
  val: 'a',
  children: [
    {
      val: 'b',
      children: [
        {
          val: 'c',
          children: []
        },
        {
          val: 'd',
          children: []
        }
      ]
    },
    {
      val: 'e',
      children: [
        {
          val: 'f',
          children: []
        },
        {
          val: 'g',
          children: []
        }
      ]
    }
  ]
}

const bfs = (root) => {
	const q = [root]
	while(q.length > 0) {
		const r = q.shift()
		console.log(r)
		r.children.forEach(item => q.push(item))
	}
}
bfs(tree)
二叉树的先中后序遍历(递归)
const bt = {
	val: 1,
	left: {
		val: 2,
		left: {
			val: 4,
			left: null,
			right: null
		},
		right: {
			val: 5,
			left: null,
			right: null,
		}
	},
	right: {
		val: 3, 
		left: {
			val: 6,
			left: null,
			right: null,
		},
		right: {
			val: 7,
			left: null,
			right: null,
		}
	}
}

// 先序遍历
const preorder = (root) => {
	if(!root) { return }
	console.log(root.val)
	preorder(root.left)
	preorder(root.right)
}
// 中序遍历
const inorder = (root) => {
	if(!root) { return }
	inorder(root.left)
	console.log(root.val)
	inorder(root.right)
}
// 后序遍历
const postorder = (root) => {
	if(!root) { return }
	postorder(root.left)
	postorder(root.right)
	console.log(root.val)
}
二叉树的先中后序遍历(非递归)
// 先序遍历
const preorder = (root) => {
  if(!root) { return }
  const stack = [root]
  while(stack.length) {
    const n = stack.pop()
    console.log(n.val)
    if( n.right ) stack.push(n.right)
    if( n.left ) stack.push(n.left)
  }
}

// 中序遍历
const inorder = (root) => {
  if(!root) { return }
  const stack = []
  let p = root
  while(stack.length || p) {
    while(p) {
      stack.push(p)
      p = p.left
    }
    const n = stack.pop()
    console.log(n.val)
    p = n.right
  }
}

// 后续遍历
const postorder = (root) => {
  if(!root) { return }
  const outputStack = []
  const stack = [root]
  while(stack.length) {
    const n = stack.pop()
    outputStack.push(n)
    if(n.left) stack.push(n.left)
    if(n.right) stack.push(n.right)
  }
  while(outputStack.length) {
    const n = outputStack.pop()
    console.log(n.val)
  }
}

2. 练习

二叉树的最大深度
二叉树的最小深度

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 11:44:27  更:2022-05-05 11:48:19 
 
开发: 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 5:23:44-

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