Python二叉搜索树与双向链表转换算法示例
程序员文章站
2023-12-02 08:35:10
本文实例讲述了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程序设计有所帮助。
上一篇: Python中按键来获取指定的值
下一篇: Python中按值来获取指定的键