记一次阿里算法题《颠倒树结构》

317 阅读1分钟

将这个树结构颠倒顺序,如下图

思路:

首先  广度遍历  出数组,然后倒序一个个替换

当场做的不是很好,后来面试结束优化了一下

// 树结构
const arr = [{  
    value: 1, 
    child: [{    
        value: 2,      
        child: [{         
             value: 4,   
        },{  
            value: 5,  
        }]  
     },{   
        value: 3,    
        child: [{   
           value: 6,
        },{        
           value: 7,   
        }] 
     }]
}]

//广度遍历出各个节点 
const list = [...arr];
const items = [];
while(list.length > 0) {   
    const item = list.shift() 
    items.push(item) // 保存指针
    item.child && list.push(...item.child)
}
// 前后交换,遍历n/2次 
for (let i = 0; i < Math.floor(items.length / 2); i++) { 
    const val = items[i].value;
    items[i].value = items[items.length - 1 - i].value;
    items[items.length - 1 - i].value = val;
}