首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
宝塔
V2EX  ›  问与答

不懂就问系列:如何不递归遍历层级结构?

  •  
  •   onlinewjm · 207 天前 · 1016 次点击
    这是一个创建于 207 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Souce Data:

    [
      {
        "Id": 1,
        "Name": "顶级",
        "Pid": 0,
        "Children": [
          {
            "Id": 2,
            "Name": "层级二 A",
            "Pid": 1,
            "Children": [
              {
                "Id": 5,
                "Name": "层级三 A",
                "Pid": 2,
                "Children": null
              }
            ]
          },
          {
            "Id": 3,
            "Name": "层级二 B",
            "Pid": 1,
            "Children": [
              {
                "Id": 4,
                "Name": "层级三 B",
                "Pid": 3,
                "Children": null
              }
            ]
          }
        ]
      }
    ]
    

    Target Data:

    [{
        "Id": 1,
        "Name": "顶级",
        "Pid": 0
    },{
        "Id": 2,
        "Name": "层级二 A",
        "Pid": 1
    }, {
        "Id": 5,
        "Name": "层级三 A",
        "Pid": 2
    },{
        "Id": 3,
        "Name": "层级二 B",
        "Pid": 1
    }, {
        "Id": 4,
        "Name": "层级三 B",
        "Pid": 3
    }]
    
    8 回复  |  直到 2019-04-24 23:07:07 +08:00
        1
    SorcererXW   207 天前 via Android
    就模拟递归栈,用个栈来存,每次弹出栈顶节点,将此节点的所有子节点入栈。循环直到栈为空
        2
    ywcjxf1515   207 天前 via iPad
    和上面类似的,用一个队列来存,对于队列中的每个节点,把其子节点入队,之后把该节点出队,循环直到队列为空。参见深度优先搜索和广度优先搜索。
        3
    kljsandjb   207 天前 via iPhone
    用 stack
        5
    onlinewjm   207 天前
    @ywcjxf1515
    @SorcererXW
    @kljsandjb

    感谢老哥指点~
        6
    rookiebulls   207 天前 via iPhone
    搭车问一下,如何把 target data 转为 sourcee data
        7
    smdbh   207 天前 via iPhone
    广度 vs 深度 遍历
        8
    reself   207 天前 via Android
    用队列。
    函数调用就会有局部信息的入栈出栈,只不过是编译器帮你完成了而不是自己显式地去入栈出栈而已。
    扩展一下,层级结构是树状,树是也是一种图。图遍历时用栈记录路径对应着深入遍历,用队列则对应着广度遍历,很有意思的。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4317 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 34ms · UTC 06:23 · PVG 14:23 · LAX 22:23 · JFK 01:23
    ♥ Do have faith in what you're doing.