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或者遍历完整个树,循环才会结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
fastjson 是一个 Java 库,用于将 JSON 字符串解析为 Java 对象或将 Java 对象序列化为 JSON 字符串。其解析 JSON 字符串的算法原理如下: 1. 首先,fastjsonJSON 字符串转换为一个字符数组。 2. fastjson 会遍历字符数组中的每个字符,直到解析完整个 JSON 字符串。 3. 如果遇到左花括号 `{`,则表示开始一个新的 JSON 对象,fastjson 会创建一个新的 Java 对象来保存该 JSON 对象的属性。 4. 如果遇到左方括号 `[`,则表示开始一个新的 JSON 数组,fastjson 会创建一个新的 Java 数组来保存该 JSON 数组的元素。 5. 如果遇到双引号 `"`,则表示开始一个 JSON 字符串,fastjson 会读取该字符串的内容并将其存储在 Java 对象的属性中。 6. 如果遇到数字或布尔值,则表示一个 JSON 数字或布尔值,fastjson 会将其转换为对应的 Java 类型并存储在 Java 对象的属性中。 7. 如果遇到 null,则表示一个空值,fastjson 会将其转换为 Java 中的 null 值并存储在 Java 对象的属性中。 8. 如果遇到逗号 `,`,则表示一个属性或元素的结束,fastjson 会继续解析下一个属性或元素。 9. 如果遇到右花括号 `}` 或右方括号 `]`,则表示当前 JSON 对象或数组的结束,fastjson 会返回解析后的 Java 对象或数组。 通过以上的步骤,fastjson 就能够将 JSON 字符串解析为对应的 Java 对象或数组。这个算法原理是比较常见的 JSON 解析方法,类似的原理也被用于其他的 JSON 解析库中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值