面试笔试考题:递归遍历树,查找符合条件的子属性

129 阅读1分钟

//笔试考试题目:涉及知识点:递归遍历树,查找符合条件的子属性,(答案在文章结尾处)

问题如下:



const tcData = [
  {
    id: '1000',
    name: '深圳',
    children: [
      {
        id: '1001',
        name: '宝安',
        children: []
      },
      {
        id: '1002',
        name: '南山',
        children: [
         {
            id: '1012',
            name: '粤海街道',
            children: [
              {
                id: '1112',
                name: '阿里中心',
                children: []
              },
              {
                id: '1212',
                name: '深圳湾人才公园',
                children: []
              }
            ]
          }
        ]
      }
    ]
  },
  {
    id: '2000',
    name: '广州',
    children: [
      {
        id: '2001',
        name: '越秀区',
        children: [
          {
            id: '2011',
            name: '人民公园'
          }
        ]
      },
      {
        id: '2002',
        name: '天河区',
        children: []
      }
    ]
  }
];

//请实现find函数
function find(data, id) {
  
}

console.log(find(tcData, '1000')); // => '深圳'
console.log(find(tcData, '2001')); // => '越秀区'
console.log(find(tcData, '1012')); // => '粤海街道'
console.log(find(tcData, '1112')); // => '阿里中心'
console.log(find(tcData, '1222')); // => '未找到'

//答案:

function find(data, id) {
    let res = '未找到'
    function walk(data,id) {
        for(var i = 0; i< data.length; i++) {
            const it = data[i]
            if(it.id === id) {
              res = it.name
              break
            } else if (it.children && it.children.length > 0) {
                walk(it.children, id)
            } 
        }
    }
    walk(data,id)
    return res
}