6

树结构如下:

const tree = [
  {
    id: '00',
    name: '南京理工大学',
    children: [
      {
        id: '0001',
        name: '化工学院',
        children: [
          {
            id: '000101',
            name: '有机化学',
          },
          {
            id: '000102',
            name: '无机化学',
            children: [
              {
                id: '00010201',
                name: '无机1组',
              },
              {
                id: '00010202',
                name: '无机2组',
              }
            ]
          }
        ]
      },
      {
        id: '0002',
        name: '计算机学院',
        children: [
          {
            id: '000201',
            name: '硬件学院',
          },
          {
            id: '000202',
            name: '软件学院',
            children: [
              {
                id: '00020201',
                name: 'Java学院'
              },
              {
                id: '00020202',
                name: 'C#学院'
              }
            ]
          }
        ]
      }
    ]
  }
];

主要算法如下:

function makePath(tree, target) {

  var done = false, path = [];

  function traverse(tree, target) {
    
    for (let i = 0; i < tree.length; i++) {
      const node = tree[i];
      if (!done) {
        if (i > 0) {
          path.pop();
        }
        path.push(node.id);
        if (node.id === target) {
          done = true;
          return;
        } else {
          let children = node.children;
          if (children) {
            traverse(children, target);
          }
        }
      }
    }

    if (!done) {
      path.pop();
    }

    return;
  };

  traverse(tree, target);

  return path;
};
makePath(tree, '000101');

运行结果:

[ '00', '0001', '000101' ]

感谢大家阅读,另外,在这边帮朋友推一个爱心众筹,希望大家能够奉献点爱心,朋友母亲,身患直肠癌,目前在北京武警总医院接收治疗,可留言留下您的联系方式,日后感激大家!

clipboard.png


CodeSteppe
7.1k 声望4.1k 粉丝