首页 > 其他分享 >树的基本操作

树的基本操作

时间:2023-05-08 23:44:11浏览次数:40  
标签:right TreeNode val 遍历 基本操作 null root

class TreeNode {
  val: number
  left: TreeNode | null
  right: TreeNode | null
  constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
    this.val = val === undefined ? 0 : val
    this.left = left === undefined ? null : left
    this.right = right === undefined ? null : right
  }
}

/**
 * 数组转二叉树
 *     - 树 -> 递归(深度优先遍历)、队列(广度优先遍历)
 *     - 二叉树 -> 前序遍历、中序遍历(二叉搜索树)、后序遍历
 * @param array
 */
function arrayToBinaryTree(array: (number | null)[]): TreeNode | null {
  const arrayNode: TreeNode[] = []
  for (let i = 0; i < array.length; i++) {
    arrayNode.push(new TreeNode(array[i] || 0, null, null))
  }
  for (let i = 0; i < arrayNode.length; i++) {
    if (arrayNode[2 * i + 1]) {
      arrayNode[i].left = arrayNode[2 * i + 1]
      arrayNode[i].right = arrayNode[2 * i + 2]
    } else {
      break
    }
  }
  return arrayNode[0]
}

/**
 * 递归遍历
 * @param root
 */
function recursionErgodic(root: TreeNode | null): void {
  if (root) {
    // console.log(root.val) // 前序遍历
    recursionErgodic(root.left)
    console.log(root.val) // 中序遍历
    recursionErgodic(root.right)
    // console.log(root.val) // 后序遍历
  }
}

/**
 * 队列遍历
 * @param root
 */
function queueErgodic(root: TreeNode | null): void {
  const queue: TreeNode[] = []
  if (root) {
    queue.push(root)
  }
  while (queue.length) {
    const node = queue.shift()!
    console.log(node.val)
    if (node.left) {
      queue.push(node.left)
    }
    if (node.right) {
      queue.push(node.right)
    }
  }
}

const treeNode = arrayToBinaryTree([
  8, 4, 12, 2, 6, 10, 14, 1, 3, 5, 7, 9, 11, 13, 15
])
recursionErgodic(treeNode)
console.log('****************')
queueErgodic(treeNode)

标签:right,TreeNode,val,遍历,基本操作,null,root
From: https://www.cnblogs.com/linding/p/17383540.html

相关文章

  • es基本操作
    增posthttp://192.168.133.131:9200/shopping/_doc{"title":"小米手机","category":"小米","images":"http://www.gulixueyuan.com/xm.jpg","price":4999}puthttp://192.168.133.131:9200/t......
  • LVM入门基本操作
    学前了解:创建有两种方式,一种是基于磁盘的,另外一种是基于分区的,如果是基于分区的就要通过fdisk或parted方式划分好分区,不要格式化,如果基于磁盘的就不需要创建分区了,直接就可以通过创建物理卷。只有创建好了物理卷之后才能添加到卷组,并在卷组里面创建逻辑卷,后格式化才能存放数据。(物......
  • 链表的基本操作
    classListNode{val:numbernext:ListNode|nullconstructor(val?:number,next?:ListNode|null){this.val=(val===undefined?0:val)this.next=(next===undefined?null:next)}}/***数组转链表*@paramarr*@paraminde......
  • 21 文件六大基本操作
    文件的六大基本操作:新建、打开、关闭、读写、删除文件;辅助操作:操作根目录文件:操作文件,先要找到与该文件对应的rfsdir_t结构;get_rootdirfile_blk函数:获取根目录文件,先调用get_rootdir函数获取根目录的rfsdir_t结构,到一个缓冲区中;del_rootdir函数释放缓冲区;获取文件名:......
  • c语言实现链表的基本操作——初始化,求长度,添加节点,遍历输出
    #include<stdio.h>#include<stdlib.h>//创建结构体并命名typedefstructNode //typedef用于对struct的重命名{ inti; structNode*next;}LNode,*LinkList; //定义一个结构体指针//链表初始化boolInistList(LinkListL){ L=(LNode*)malloc(sizeof(LNo......
  • matlab学习1(基本操作、stringchar、矩阵运算、基础图)
    1.matlab简介matlab是矩阵实验室,数据是以矩阵的形式存在。2.基本操作1).直接在命令行输入指令2).在脚本文件章编写程序后运行脚本文件:存放代码的文件,尾缀:.m实时脚本文件界面方便,将结果实时显示在代码旁边(可以加代码,图片,类似于一个文档编辑器,很推荐使用)3).在函数文......
  • 数据库的基本操作
    结构化查询语句分类创建数据表数据类型字符串类型日期和时间型数值类型NULL值设置数据表的类型数据表的存储位置设置数据表字符集修改表(ALTERTABLE)删除数据表其他结构化查询语句分类数据库操作创建数据库:createdatabase[ifnotexists]数据库名;删除数据库......
  • 量子相关计算基本操作
    NOT,SWAPC-NOT量子门量子门NOT门NOT:输入与输出相反。量子门SWAP门SWAP:交换两个输入量子门C-NOT门 C-NOT:Controlled-NOT根据控制位决定输入是否变为相反的值。控制位为0,输出为目标值原值;控制位为1,输出为目标值的非值。此过程控制位的值保持不变。 C-NOT门中,控制位也......
  • Python-集合的基本操作(set)
    1. 前言python中的集合和数学里的类似也是用于存放不重复的元素,它有可变集合(set)和不可变集合(feozenset)两种,集合的所有元素都放在一对大括号"{}"里(列表是[]、元组是()、字典是{}),集合最好的应用就是去重,因为集合中的每一个元素都是唯一的。 2. 集合的创建2.1.直接使用"{}"创......
  • Python-字典的基本操作
    1.字典的创建1.1、直接赋值创建字典语法格式:变量名={键1:值1,键2:值2,...}info={'第一个':0,"第二个":1,"第三个":2}print(info)1.2、使用内置函数dict()创建字典内置函数dict()可通过其他字典、“(键,值)”对的序列或关键字参数来创建字典。#创建空的字典info2=dict()#使......