leetcode 430 扁平化多級雙向鍊錶

2021-10-22 14:18:50 字數 3387 閱讀 9940

題目鏈結

多級雙向鍊錶中,除了指向下乙個節點和前乙個節點指標之外,它還有乙個子鍊錶指標,可能指向單獨的雙向鍊錶。這些子列表也可能會有乙個或多個自己的子項,依此類推,生成多級資料結構,如下面的示例所示。

給你位於列表第一級的頭節點,請你扁平化列表,使所有結點出現在單級雙鏈表中。

示例 1:

輸入:head =[1

,2,3

,4,5

,6,null,null,null,7,

8,9,

10,null,null,11,

12]輸出:[1,

2,3,

7,8,

11,12,

9,10,

4,5,

6]解釋:輸入的多級列表如下圖所示:

扁平化後的鍊錶如下圖:

示例 2:

輸入:head =[1

,2,null,3]

輸出:[1,

3,2]

解釋:輸入的多級列表如下圖所示:

1---

2---null

|3--

-null

示例 3:

輸入:head =

輸出:[

]

如何表示測試用例中的多級鍊錶?以 示例 1 為例:

1--

-2--

-3--

-4--

-5--

-6--null

|7---8-

--9-

--10-

-null

|11-

-12--null

序列化其中的每一級之後:

[1,

2,3,

4,5,

6,null][7

,8,9

,10,null][11

,12,null]

為了將每一級都序列化到一起,我們需要每一級中新增值為 null 的元素,以表示沒有節點連線到上一級的上級節點。

[1,

2,3,

4,5,

6,null]

[null,null,7,

8,9,

10,null]

[null,11,

12,null]

合併所有序列化結果,並去除末尾的 null 。

[1,

2,3,

4,5,

6,null,null,null,7,

8,9,

10,null,null,11,

12]

將多級鍊錶順時針旋轉90度,可以把它看成乙個二叉樹,發現,遍歷的方式正好是二叉樹的前序遍歷。

"""

# definition for a node.

class node(object):

def __init__(self, val, prev, next, child):

self.val = val

self.prev = prev

self.next = next

self.child = child

"""class

solution

(object):

defflatten

(self, head):if

not head:

return

pseudohead = node(0,

none

,head,

none

) prev = pseudohead

stack =

while stack:

curr = stack.pop(

) prev.

next

= curr

curr.prev = prev

if curr.

next

:next

)if curr.child:

# don't forget to remove all child pointers.

curr.child =

none

prev = curr

# detach the pseudo head node from the result.

pseudohead.

next

.prev =

none

return pseudohead.

next

"""

# definition for a node.

class node:

def __init__(self, val, prev, next, child):

self.val = val

self.prev = prev

self.next = next

self.child = child

"""class

solution

:def

flatten

(self, head:

'node')-

>

'node'

:#前序遍歷

ifnot head:

return head

stack =

cur = head

res =

while stack or cur:

while cur:

cur = cur.child

cur = stack.pop(

) cur = cur.

next

#利用前面得到的列表去生成單級雙向鍊錶

dummy = node(0)

pred = dummy

while res:

val = res.pop(0)

new = node(val)

new.prev = pred

pred.

next

= new

pred = new

pred.

next

=none

dummy.

next

.prev =

none

return dummy.

next

LeetCode 430 扁平化多級雙向鍊錶

您將獲得乙個雙向鍊錶,除了下乙個和前乙個指標之外,它還有乙個子指標,可能指向單獨的雙向鍊錶。這些子列表可能有乙個或多個自己的子項,依此類推,生成多級資料結構,如下面的示例所示。扁平化列表,使所有結點出現在單級雙鏈表中。您將獲得列表第一級的頭部。示例 輸入 1 2 3 4 5 6 null 7 8 9...

430 扁平化多級雙向鍊錶

題目 多級雙向鍊錶中,除了指向下乙個節點和前乙個節點指標之外,它還有乙個子鍊錶指標,可能指向單獨的雙向鍊錶。這些子列表也可能會有乙個或多個自己的子項,依此類推,生成多級資料結構,如下面的示例所示。給你位於列表第一級的頭節點,請你扁平化列表,使所有結點出現在單級雙鏈表中。示例 1 輸入 head 1,...

陣列扁平化

原陣列 const arr 1,2,3,4 5,6,7,8 9 希望輸出 1,2,3,4,5,6,7,8,9 方法一 遞迴 function arrdelayering arr else return newarr let newarr arrdelayering arr 1,2,3,4,5,6,7...