CCF201809-3 元素选择器 Python 递归实现 dfs 100分

博客介绍了如何使用Python递归实现CSS元素选择器,将HTML视为树结构,通过创建节点字典表示HTML元素,并通过递归处理HTML字符串,构建整个DOM树。文章详细阐述了节点表示、创建逻辑和查询逻辑,提供了一个样例输入和输出,展示了实现后的字典结构。
摘要由CSDN通过智能技术生成

思路:

这是一个树,可以类比数据结构中的二叉树。

二叉树有一个值(val),和不超过两个叶子节点

这个html树可能有多个值,id属性和 标签属性(div/p/h1这些),可能有多个节点

题目描述:

    可能出现 div #one 这种复合的后代选择器

 

于是我想直接用python嵌套的字典来完成

一:节点的表示:每个节点用dict表示,每个节点的关键属性是,dict['idTag']  id   ,dict['value']  标签属性  ,dict['childNode']  //关键,是列表类型,列表里仍然储存着  节点(递归)

二:创建的罗技逻辑:

 creat (root)函数:

    为了实现它,首先定义了一个linePointet【int】,指向待处理的html的第几行

    creat (root),可以把缓冲区(html字符串的第linePointer个)的节点,挂载在root下

    因此首先需要创建一个最大的,把html当作跟放进去,下面的语句起到这个作用

    htmlDom = dict()
    htmlDom['leval']=0
    htmlDom['value']=None

    然后呢,就可以递归的创建了,逻辑是这样的:

   循环    一直认为当前缓冲区的是 root的子节点{

       把缓冲区的字符串处理成定义的标准类型    

        IF这个新的节点是root的跟{

             1:把新节点(newNode)append到root的儿子列表里 

             2:调整下linePointer到下一个节点,注意,下一个可能是newNode的儿子,也可能是newNode的兄弟,也可能是是           newNode直接间接前驱,但是注意,只要 linePointer指的不是当前递归调用里的&#x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值