Python程式:將連結串列轉換為之字形二叉樹
假設我們有一個單鏈表,我們需要使用以下規則將其轉換為二叉樹路徑:
- 連結串列的頭節點作為根節點。
- 每個後續節點,如果其值小於父節點的值,則成為父節點的左子節點,否則成為右子節點。
因此,如果輸入為 [2,1,3,4,0,5],則輸出將為
為了解決這個問題,我們將遵循以下步驟:
- 定義一個函式 solve()。它將接收一個節點作為引數。
- 如果節點為空,則
- 返回 null
- root := 建立一個樹節點,其值與節點的值相同。
- 如果節點的 next 不為空,則
- 如果節點的 next 的值小於節點的值,則
- root 的左子節點 := solve(節點的 next)
- 否則,
- root 的右子節點 := solve(節點的 next)
- 如果節點的 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,
廣告