这是节点结构,默认name在数组当中的所有对象中具有唯一性。当然,如果需要,可以添加利用唯一id当作标识。
interface DataFormat {
name:string,
children?:Array<DataFormat>
}
我写了一个用于遍历的数组结构和一个目标节点。testData从name为0的根节点开始开始,深度增加,每一个叶子节点都有name属性,并且可能存在children属性,children是数组结构,若存在children结构,则说明当前节点存在子节点。
const testData:DataFormat={
name:'0',
children:[{
name:'1',
children:[{
name:'11'
},{
name:'12'
}]
},{
name:'2'
},{
name:'3',
children:[{
name:'31',
children:[{
name:'311',
},{
name:'312',
children:[{
name:'3112',
}]
}]
},{
name:'32'
}]
}]
}
const node:DataFormat={name:'32'};
为了在最后能够保存得到的路径,我创建了一个outputArray用于存放保存的节点。
findFlag作为一个全局变量,在找到目标节点时进行标识,并保证在接下来的递归当中控制逻辑。
思路:树形结构遍历很容易想到用递归,对二叉树,我们采用分别对左子节点和右子节点进行递归。而这里等价于对children数组进行遍历。这样,可以很容易从二叉树的递归当中设计递归。