Python程序:将链表转换为之字形二叉树


假设我们有一个单链表,我们需要使用以下规则将其转换为二叉树路径:

  • 链表的头节点作为根节点。
  • 每个后续节点,如果其值小于父节点的值,则成为父节点的左子节点,否则成为右子节点。

因此,如果输入为 [2,1,3,4,0,5],则输出将为

为了解决这个问题,我们将遵循以下步骤:

  • 定义一个函数 solve()。它将接收一个节点作为参数。
  • 如果节点为空,则
    • 返回 null
  • root := 创建一个树节点,其值与节点的值相同。
  • 如果节点的 next 不为空,则
    • 如果节点的 next 的值小于节点的值,则
      • root 的左子节点 := solve(节点的 next)
    • 否则,
      • root 的右子节点 := solve(节点的 next)
  • 返回 root

让我们看看下面的实现,以便更好地理解:

示例

 在线演示

class ListNode:
   def __init__(self, data, next = None):
      self.val = data
      self.next = next
def make_list(elements):
   head = ListNode(elements[0])
   for element in elements[1:]:
      ptr = head
      while ptr.next:
         ptr = ptr.next
      ptr.next = ListNode(element)
   return head
class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.data = data
      self.left = left
      self.right = right
def print_tree(root):
   if root is not None: print_tree(root.left)
      print(root.data, end = ', ') print_tree(root.right)
class Solution:
   def solve(self, node):
      if not node:
         return None
         root = TreeNode(node.val)
      if node.next:
         if node.next.val < node.val:
            root.left = self.solve(node.next)
         else:
            root.right = self.solve(node.next)
      return root
ob = Solution()
L = make_list([2,1,3,4,0,5])
print_tree(ob.solve(L))

输入

[2,1,3,4,0,5]

输出

1, 3, 0, 5, 4, 2,

更新于: 2020年11月19日

178 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告