当前位置:首页 > JavaScript

js实现树状

2026-04-06 11:36:49JavaScript

js实现树状结构

树状结构在JavaScript中通常用于表示层级数据,例如文件系统、组织架构或菜单。以下是几种常见的实现方式:

使用对象表示树

最简单的树状结构可以通过嵌套对象实现:

const tree = {
  value: 'Root',
  children: [
    {
      value: 'Child 1',
      children: [
        { value: 'Grandchild 1', children: [] },
        { value: 'Grandchild 2', children: [] }
      ]
    },
    {
      value: 'Child 2',
      children: []
    }
  ]
};

使用类实现树节点

更结构化的方式是通过类定义树节点:

class TreeNode {
  constructor(value) {
    this.value = value;
    this.children = [];
  }

  addChild(childNode) {
    this.children.push(childNode);
  }
}

const root = new TreeNode('Root');
const child1 = new TreeNode('Child 1');
const child2 = new TreeNode('Child 2');
root.addChild(child1);
root.addChild(child2);

递归遍历树

深度优先遍历的递归实现:

js实现树状

function traverse(node) {
  console.log(node.value);
  node.children.forEach(child => traverse(child));
}

非递归遍历

使用栈实现深度优先遍历:

function traverse(root) {
  const stack = [root];
  while (stack.length) {
    const node = stack.pop();
    console.log(node.value);
    for (let i = node.children.length - 1; i >= 0; i--) {
      stack.push(node.children[i]);
    }
  }
}

树状结构可视化

使用递归生成HTML结构的示例:

js实现树状

function renderTree(node) {
  if (!node.children.length) return `<li>${node.value}</li>`;
  return `
    <li>
      ${node.value}
      <ul>
        ${node.children.map(child => renderTree(child)).join('')}
      </ul>
    </li>
  `;
}

查找节点

深度优先搜索实现:

function findNode(root, targetValue) {
  if (root.value === targetValue) return root;
  for (const child of root.children) {
    const found = findNode(child, targetValue);
    if (found) return found;
  }
  return null;
}

性能优化

对于大型树结构,可以考虑以下优化:

  • 使用备忘录模式缓存遍历结果
  • 实现广度优先搜索时使用队列
  • 为节点添加唯一标识符便于查找

实际应用示例

文件目录树的实现:

class FileSystem {
  constructor(name, isFolder = false) {
    this.name = name;
    this.isFolder = isFolder;
    this.children = [];
  }

  addItem(item) {
    if (!this.isFolder) throw new Error('Can only add to folders');
    this.children.push(item);
  }

  find(path) {
    const parts = path.split('/');
    let current = this;
    for (const part of parts) {
      if (!part) continue;
      const found = current.children.find(item => item.name === part);
      if (!found) return null;
      current = found;
    }
    return current;
  }
}

标签: 树状js
分享给朋友:

相关文章

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似: func…