計算樹結點路徑的一種Javascript的實現

樹結構以下:node

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');

運行結果:spa

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

感謝你們閱讀,另外,在這邊幫朋友推一個愛心衆籌,但願你們可以奉獻點愛心,朋友母親,身患直腸癌,目前在北京武警總醫院接收治療,可留言留下您的聯繫方式,往後感激你們!code

clipboard.png

相關文章
相關標籤/搜索