无限极分类算法

无限极分类算法

数据结构:

create table web_class (
    "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
    "name" varchar(255) NOT NULL,         --名称
    "bid" integer,                        --上级ID
)

数据库数据:

{id:1, name:'名称1', bid:0}
{id:2, name:'名称2', bid:0}
{id:3, name:'名称3', bid:1}
{id:4, name:'名称4', bid:1}
{id:5, name:'名称5', bid:3}
{id:6, name:'名称6', bid:5}

需要实现的树形菜单(类似如下):

[{'bid':0,'id':1,'name':'名称1',
    'son':[
        {'bid':1,'id':3,'name':'名称3',
            'son':[
               {'bid':3,'id':5,'name':'名称5',
                   'son':[
                       {'bid':5,'id':6,'name':'名称6','son':[]}
                   ]
               }
            ]
        },
        {'bid':1,'id':4,'name':'名称4','son':[]}
    ]
},
{'bid':0,'id':2,'name':'名称2','son':[]}]

算法来了(有两种方式)

用树实现
def xTree(datas):
    lists=[]
    tree={}
    parent_id=''
    for i in datas:
        item=i
        tree[item['id']]=item
    root=None
    for i in datas:
        obj=i
        if not obj['bid']:
            root=tree[obj['id']]
            lists.append(root)
        else:
            parent_id=obj['bid']
            if 'children' not in tree[parent_id]:   
                tree[parent_id]['children']=[]
            tree[parent_id]['children'].append(tree[obj['id']])
    return lists
print(xTree(datas))

和上面一样的思想
def get_tree(data):
    lists = []
    tree = {}
    for item in data:
        tree[item['cat_id']] = item
    print(tree)
    for item in data:
        # 找到子根
        if not item['parent_id']:
            lists.append(tree[item['cat_id']])
        else:
            parent_id = item['parent_id']
            # 如果没有children键 就加进去,并且赋值为空,以便后面加进去儿级数据
            if "children" not in tree[parent_id]:
                tree[parent_id]["children"] = []
            tree[parent_id]['children'].append(tree[item['cat_id']])

    return lists

递归实现
lis = []
def get_son1(data, parent_id=0, level=0, is_clear=True):
    if is_clear:
        lis.clear()
    for item in data:
        if item['parent_id'] == parent_id:
            item['level'] = level
            lis.append(item)
            get_son1(data, parent_id=item["cat_id"], level=level + 1, is_clear=False)
    return lis
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值