onlinewjm
V2EX  ›  问与答

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

  •  
  •   onlinewjm · Apr 24, 2019 · 2806 views
    This topic created in 2752 days ago, the information mentioned may be changed or developed.

    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 replies  •  2019-04-24 23:07:07 +08:00
    SorcererXW
    SorcererXW
    Apr 24, 2019 via Android
    1
    就模拟递归栈,用个栈来存,每次弹出栈顶节点,将此节点的所有子节点入栈。循环直到栈为空
    ywcjxf1515
    ywcjxf1515
    Apr 24, 2019 via iPad
    2
    和上面类似的,用一个队列来存,对于队列中的每个节点,把其子节点入队,之后把该节点出队,循环直到队列为空。参见深度优先搜索和广度优先搜索。
    kljsandjb
    kljsandjb
    Apr 24, 2019 via iPhone
    3
    用 stack
    onlinewjm
    onlinewjm
    OP
    Apr 24, 2019
    5
    @ywcjxf1515
    @SorcererXW
    @kljsandjb

    感谢老哥指点~
    rookiebulls
    rookiebulls
    Apr 24, 2019 via iPhone
    6
    搭车问一下,如何把 target data 转为 sourcee data
    smdbh
    smdbh
    Apr 24, 2019 via iPhone
    7
    广度 vs 深度 遍历
    reself
    reself
    Apr 24, 2019 via Android
    8
    用队列。
    函数调用就会有局部信息的入栈出栈,只不过是编译器帮你完成了而不是自己显式地去入栈出栈而已。
    扩展一下,层级结构是树状,树是也是一种图。图遍历时用栈记录路径对应着深入遍历,用队列则对应着广度遍历,很有意思的。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4583 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 09:33 · PVG 17:33 · LAX 01:33 · JFK 04:33
    ♥ Do have faith in what you're doing.