Flettu tvöfalda tré við tengda lista LeetCode lausn segir að - Í ljósi þess root
af tvíundartré, flettu tréð út í „tengdan lista“:
- „Tengdi listinn“ ætti að nota það sama
TreeNode
bekk þar semright
barnabendill bendir á næsta hnút á listanum ogleft
barn bendill er alltafnull
. - „Tengdi listinn“ ætti að vera í sömu röð og a Pre-röð yfirferð af tvíundartrénu.
Dæmi 1:
inntak:
root = [1,2,5,3,4,null,6]
Output:
[1,null,2,null,3,null,4,null,5,null,6]
Dæmi 2:
inntak:
root = []
Output:
[]
Dæmi 3:
inntak:
root = [0]
Output:
[0]
ALGÓRITIMA -
HUGMYND -
- Til þess að fletja út tvöfalda tré, finnum við fyrst hægra megin í vinstra undirtrénu og eftir að við höfum náð hæsta stakinu munum við tengja hægri bendilinn þess hnúts við hægri undirtré tiltekins trés.
- Í skrefi 2 munum við tengja hægri bendilinn á rótarhnútnum við vinstri undirtréð og stilla vinstri undirtréð sem núll.
- Í skrefi 3 er nú rótarhnúturinn okkar hægri undirtréshnútur, sama ferli mun gerast með þessum hnút og ferlið heldur áfram þar til allir vinstri hlutar verða að engu.
Aðferð til að fletja tvöfalda tré við Leetcode lausn á tengdum lista -
– Í fyrstu mun ég keyra lykkju þ.e. while(rót != null) þá mun ég taka tvær breytur og geyma vinstri undirtréð.
– mun þá athuga hvort hnúturinn sé lengst til hægri í vinstri undirtré með því að nota while(k.left != null) og mun tengja þann hnút við hægri undirtré með því að nota (k.right = root.right).
– tengdu síðan hægri bendilinn á rótarhnút við vinstri undirtré (root.right = vinstri) og stilltu vinstri bendilinn á rótarhnút sem null(root.left=null) og mun uppfæra með (rót = root.right ) þannig að nú er rót rétt undirtré hnút.
– þetta ferli mun halda áfram þar til allir vinstri undirtré hlutar verða hægri undirtré. Þess vegna mun tvíundartréð fletjast út.
Python lausn:
class Solution: def flatten(self, root: Optional[TreeNode]) -> None: while(root): if root.left: k = root.left temp = root.left while(k.right): k = k.right k.right = root.right root.right = temp root.left = None root = root.right
Java lausn:
class Solution { public void flatten(TreeNode root) { while (root != null) { if (root.left != null) { TreeNode k = root.left; TreeNode temp = root.left; while (k.right != null) k = k.right; k.right = root.right; root.right = temp; root.left = null; } root = root.right; } } }
Tímaflæki: O(N)
Rýmisflókið: O (1)
Þar sem við höfum farið aðeins einu sinni yfir verður tímaflækjustigið o(n).
og þar sem við höfum ekki tekið neitt aukapláss verður flókið rými o(1) stöðugt aukarými.
Svipuð spurning - https://www.tutorialcup.com/interview/linked-list/flattening-linked-list.htm