树形结构根据节点查找某条路径(typescript)

这篇博客介绍了一种在具有唯一name属性的树形结构中寻找特定节点路径的方法。通过递归遍历每个节点及其children数组,当找到目标节点时记录路径,并在递归返回过程中构建从目标节点到根节点的完整路径。最终,输出的路径数组从尾到头表示了这条路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是节点结构,默认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数组进行遍历。这样,可以很容易从二叉树的递归当中设计递归。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值