当前位置: 首页 > article >正文

js前序遍历等

文章目录

  • 一、数据结构
  • 二、先序遍历
  • 三、中序遍历
  • 四、后序遍历
  • 五、层序遍历

前序遍历、中序遍历、后序遍历、层序遍历

一、数据结构

// 二叉树的数据结构; 为节点初始化属性和子节点,数据属性这里只有value
// lNode: 左子节点
// rNode: 右子节点
const root = {
  value: "ROOT",
  lNode: {
    value: "A",
    lNode: {
      value: "C",
      lNode: { value: "E", lNode: null, rNode: null },
      rNode: { value: "F", lNode: null, rNode: null }
    },
    rNode: { value: "D", lNode: { value: "G", lNode: null, rNode: null }, rNode: null }
  },
  rNode: { value: "B", lNode: null, rNode: null }
};

二、先序遍历

// 先序遍历
const preorderTraverse = (node) => {
  if (node === null) return;
  // 注意这里是console,做测试效果,其实可以得到元素的顺序,做其他排序等操作
  console.log("value", node?.value);
  preorderTraverse(node.lNode);
  preorderTraverse(node.rNode);
};
try {
  preorderTraverse(root);
} catch (error) {
  console.log("error", error);
}

三、中序遍历

// 中序遍历
const inorderTraverse = (node) => {
  if (node === null) return;
  inorderTraverse(node.lNode);
  console.log(node.value);
  inorderTraverse(node.rNode);
};
try {
  inorderTraverse(root);
} catch (error) {
  console.log("error", error);
}

四、后序遍历

// 后序遍历
const postorderTraverse = (node) => {
  if (node === null) return;
  postorderTraverse(node.lNode);
  postorderTraverse(node.rNode);
  console.log(node.value);
};
try {
  postorderTraverse(root);
} catch (error) {
  console.log("error", error);
}

五、层序遍历

// 层序遍历
const sequenceTraverse = (root) => {
  if (!root) return;
  let queue = []; // 队列
  queue.push(root); // 初始队列
  // 循环队列;循环的过程中不断拆分节点,左右先后入队
  while (queue.length) {
    const node = queue.shift(); // 弹出队首元素
    console.log(node.value);
    // 每个元素都要拆分左右子树,并且入队
    if (node.lNode) {
      queue.push(node.lNode);
    }
    if (node.rNode) {
      queue.push(node.rNode);
    }
  }
};
try {
  sequenceTraverse(root);
} catch (error) {
  console.log("error", error);
}

http://www.kler.cn/a/500008.html

相关文章:

  • 79 Openssl3.0 RSA公钥加密数据
  • 数据结构大作业——家谱管理系统(超详细!完整代码!)
  • 在Django的Serializer的列表数据中剔除指定元素
  • 鸿蒙面试 2025-01-09
  • git - 用SSH方式迁出远端git库
  • 从0开始分享一个React项目(二):React-ant-admin
  • docker配置镜像加速
  • 【LC】3270. 求出数字答案
  • 【钉钉在线笔试题】字符串表达式的加减法
  • 监听器与RBAC权限模型
  • Python的循环
  • 寻找最短路径
  • 【论文阅读】SDA-FC: Bridging federated clustering and deep generative model
  • JAVA中线程池ThreadPoolExecutor的使用
  • “天上北斗+地上5G”,遨游北斗终端绘危急特场景通信新蓝图
  • 音视频入门基础:RTP专题(2)——使用FFmpeg命令生成RTP流
  • 【学习路线】Python进阶 详细知识点学习路径(附学习资源)
  • 机器学习之基本概念 - 特征、标签、样本
  • 8分钟入门 Overleaf Latex-笔记
  • <C++学习>C++ Boost 算法集合操作教程
  • Android 13 framework方法通过AIDL方式供三方APP使用
  • 最新前端面试题(附答案)
  • 使用uniapp 微信小程序一些好用的插件分享
  • 基于单片机的指纹密码锁