N-Array Tree to Binary Tree
https://leetcode.com/problems/encode-n-ary-tree-to-binary-tree/
这道题很难想如果是第一次做。解法是下图:

中心思想就是把n-array node里最左边的child变成binary node的左孩子,然后剩下所有node成为左孩子的右孩子。 这样一个n-array node的所有孩子都到它的left subtree里面了。以此类推,所有node的child用右孩子来作为它同level孩子 的连接。而左孩子用来存放它n-tray node里的所有孩子。
"""
# Definition for a Node.
class Node(object):
def __init__(self, val=None, children=None):
self.val = val
self.children = children
"""
"""
# Definition for a binary tree node.
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
"""
class Codec:
def encode(self, root):
"""Encodes an n-ary tree to a binary tree.
:type root: Node
:rtype: TreeNode
"""
if root == None:
return None
node = TreeNode(root.val)
children = root.children
if len(children) > 0:
node.left = self.encode(children[0])
curr = node.left
for child in children[1:]:
curr.right = self.encode(child)
curr = curr.right
return node
def decode(self, data):
"""Decodes your binary tree to an n-ary tree.
:type data: TreeNode
:rtype: Node
"""
if not data:
return None
node = Node(data.val,[])
children = []
if data.left:
children.append(self.decode(data.left))
curr = data.left
while curr.right:
children.append(self.decode(curr.right))
curr = curr.right
node.children = children
return node
Last updated
Was this helpful?