📜  使用递归从中间顺序到左右顺序遍历链接列表(1)

📅  最后修改于: 2023-12-03 14:49:58.077000             🧑  作者: Mango

使用递归从中间顺序到左右顺序遍历链接列表

通过递归的方式从中间顺序(in-order)遍历单向链接列表,并依次输出每个节点的值,从而实现从左到右顺序(left-to-right)遍历的效果。

实现思路
  1. 定义一个函数 traverse(curr, count),该函数接受两个参数:
  • curr: 当前节点
  • count: 当前节点到列表尾节点的距离
  1. traverse 函数中:
  • 如果 count 等于 1,输出当前节点的值
  • 如果 count 大于 1,先递归遍历当前节点的下一个节点,参数为 count - 1,然后输出当前节点的值
  1. 调用 traverse 函数,将当前节点设为头节点(head),距离设为列表长度(length),即 traverse(head, length)
代码实现
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def traverse(curr: ListNode, count: int):
    if count == 1:
        print(curr.val)
        return
    traverse(curr.next, count - 1)
    print(curr.val)

def inorder_to_ltor(head: ListNode):
    length = 0
    curr = head
    while curr:
        length += 1
        curr = curr.next
    traverse(head, length)

# Example usage:
# head = ListNode(1, ListNode(2, ListNode(3, ListNode(4))))
# inorder_to_ltor(head)  # Output: 2 1 3 4

上述代码实现了 inorder_to_ltor 函数,该函数先计算出列表的长度 length,然后调用 traverse 函数,参数为 head, length。 在 traverse 函数的实现中,首先判断 count 是否为 1,如果是,输出当前节点的值。否则,先递归访问当前节点的下一个节点,参数设为 count - 1,然后输出当前节点的值。调用 traverse(head, length) 即可实现从中间顺序到左右顺序遍历。