Json多叉树查找算法

从一个多叉树形结构的Json数据中,查找某个元素。

Json数据的树形结构的特征是,id是全局唯一的。当然,这是用来标识唯一节点的,必须是唯一的。

示例数据如下:

{
    "id": 1,
    "name": "一",
    "children": [
        {
            "id": 2,
            "name": "二",
            "children": [
                {
                    "id": 6,
                    "name": "六"
                },
                {
                    "id": 7,
                    "name": "七",
                    "children": [
                        {
                            "id": 11,
                            "name": "十一"
                        },
                        {
                            "id": 12,
                            "name": "十二"
                        }
                    ]
                },
                {
                    "id": 8,
                    "name": "八"
                }
            ]
        },
        {
            "id": 3,
            "name": "三"
        },
        {
            "id": 4,
            "name": "四",
            "children": [
                {
                    "id": 9,
                    "name": "九"
                },
                {
                    "id": 10,
                    "name": "十"
                }
            ]
        },
        {
            "id": 5,
            "name": "五"
        }
    ]
}

目前使用的算法如下:

def find_tree(tree, id):
            node_list = []  # 初始化列表
            node_list.append(tree)  # 追加根结点到列表
            while node_list:  # 遍历列表
                node = node_list.pop(0)  # 移除并返回第一个元素
                if node['id'] == id:  # 对照id
                    return node['name']  # 返回对象的name属性值
                if 'children' in node.keys():  # 如果存在子节点,则进行追加操作
                    for t in node['children']:  # 遍历子节点
                        node_list.append(t)  # 追加到列表

算法说明:这个算法通过广度遍历的方法,寻找指定的id。其中利用一个列表依次追加在遍历过程中出现的子节点,然后在循环中不断的移除列表的第一个元素进行id对照,直到找到指定id或者遍历完整个树,循环才会结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值