zoukankan      html  css  js  c++  java
  • 109有序链表转化为二叉搜索树

    class ListNode:
    def __init__(self, val=0, next=None):
    self.val = val
    self.next = next
    class TreeNode:
    def __init__(self, val=0, left=None, right=None):
    self.val = val
    self.left = left
    self.right = right
    a = ListNode(-10)
    b = ListNode(-3)
    c = ListNode(0)
    d = ListNode(5)
    e = ListNode(9)
    # a = ListNode(-10)
    a.next = b
    b.next = c
    c.next = d
    d.next = e
    # 这道题大方向考虑的是递归,递归的进行找到每一个节点。
    # 每一个节点就是当前链表的中间节点,如果是偶数,那就是中间靠右节点。
    # 注意每次找到中间节点后要把链表分开。左边是左子树,右边是右子树
    class Solution:
    def sortedListToBST(self, head: ListNode) -> TreeNode:
    return self.dfs(head,None)
    # 定义函数寻找中间节点
    def search_node(self,head,tail):
    # 用快慢指针的方法来寻找。
    slow,fast = head,head
    while fast != tail and fast.next != tail:
    slow = slow.next
    fast = fast.next.next
    # 最后慢指针的位置,就是我们需要的
    return slow
    def dfs(self,head,tail):
    # 头指针指向链表头节点,尾指针指向链表尾节点。
    # 如果头节点和尾节点重合,说明不需要进行遍历了。
    if head == tail :return
    # 寻找中间节点
    node = self.search_node(head,tail)
    print(node.val)
    # 然后将中间节点变成二叉树的节点
    root = TreeNode(node.val)
    # 寻找左子树
    root.left = self.dfs(head,node)
    # 寻找右子树
    root.right = self.dfs(node.next,tail)
    return root

    A = Solution()
    A.sortedListToBST(a)

  • 相关阅读:
    第六周作业
    第二次作业
    自我介绍
    2019春总结作业
    2019春第四次课程设计实验报告
    2019春第三次课程设计实验报告
    2019春第二次课程设计实验报告
    2019春第一次课程设计实验报告
    第十二周编程总结
    第十一周编程总结
  • 原文地址:https://www.cnblogs.com/cong12586/p/13521987.html
Copyright © 2011-2022 走看看