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)

  • 相关阅读:
    仿微博的JQuery日历控件
    JavaScript演示下Singleton设计模式
    简短的创建Ajax对象代码
    C++常用速查
    学习网站
    Ubuntu纯命令行安装并配置Teamviewer
    在Jupyter中使用自定义conda环境
    TensorFLow: Gradient Clipping
    Python partial 工具函数
    lambda X, y: X
  • 原文地址:https://www.cnblogs.com/cong12586/p/13521987.html
Copyright © 2011-2022 走看看