欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python二叉搜索树与双向链表转换算法示例

程序员文章站 2023-11-04 22:35:58
本文实例讲述了python二叉搜索树与双向链表转换算法。分享给大家供大家参考,具体如下: 题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能...

本文实例讲述了python二叉搜索树与双向链表转换算法。分享给大家供大家参考,具体如下:

题目描述

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

普通的二叉树也可以转换成双向链表,只不过不是排序的

思路:

1. 与中序遍历相同

2. 采用递归,先链接左指针,再链接右指针

代码1,更改doublelinkedlist,最后返回list的第一个元素:

class treenode:
  def __init__(self, x):
    self.val = x
    self.left = none
    self.right = none
class solution:
  def lastelem(self, list):
    if len(list) == 0:
      return none
    else: return list[len(list) - 1]
  def convertcore(self, proot, doublelinkedlist):
    if proot:
      if proot.left:
        self.convertcore(proot.left, doublelinkedlist)
      proot.left = self.lastelem(doublelinkedlist)
      if self.lastelem(doublelinkedlist):
        self.lastelem(doublelinkedlist).right = proot
      doublelinkedlist.append(proot)
      if proot.right:
        self.convertcore(proot.right, doublelinkedlist)
  def convert(self, prootoftree):
    if prootoftree == none:
      return none
    doublelinkedlist = []
    self.convertcore(prootoftree, doublelinkedlist)
    return doublelinkedlist[0]

代码2,lastlistnode指向双向链表中的最后一个节点,因此每次操作最后一个节点。这里要更改值,因此采用list的形式。

class treenode:
  def __init__(self, x):
    self.val = x
    self.left = none
    self.right = none
class solution:
  def convertcore(self, proot, lastlistnode):
    if proot:
      if proot.left:
        self.convertcore(proot.left, lastlistnode)
      proot.left = lastlistnode[0]
      if lastlistnode[0]:
        lastlistnode[0].right = proot
      lastlistnode[0] = proot
      if proot.right:
        self.convertcore(proot.right, lastlistnode)
  def convert(self, prootoftree):
    # write code here
    if prootoftree == none:
      return none
    lastlistnode = [none]
    self.convertcore(prootoftree, lastlistnode)
    while lastlistnode[0].left:
      lastlistnode[0] = lastlistnode[0].left
    return lastlistnode[0]

更多关于python相关内容感兴趣的读者可查看本站专题:《python数据结构与算法教程》、《python加密解密算法与技巧总结》、《python编码操作技巧总结》、《python函数使用技巧总结》、《python字符串操作技巧汇总》及《python入门与进阶经典教程

希望本文所述对大家python程序设计有所帮助。