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

  

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

  

<强>题目描述

  

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

  

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

  

<>强思路:

  

1。与中序遍历相同

  

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

  

<强>代码1 强,更改doubleLinkedList,最后返回列表的第一个元素:

        类TreeNode:   def __init__(自我,x):   自我。val=x   自我。左=没有   自我。正确的=没有   类解决方案:   def lastElem(自我,列表):   如果len(列表)==0:   回来没有   其他:返回列表(len(列表)- 1)   def ConvertCore(自我、pRoot doubleLinkedList):   如果pRoot:   如果pRoot.left:   self.ConvertCore (pRoot。左,doubleLinkedList)   pRoot。左=self.lastElem (doubleLinkedList)   如果self.lastElem (doubleLinkedList):   self.lastElem (doubleLinkedList)。正确的=pRoot   doubleLinkedList.append (pRoot)   如果pRoot.right:   self.ConvertCore (pRoot。对,doubleLinkedList)   def转换(自我,pRootOfTree):   如果pRootOfTree==没有:   回来没有   doubleLinkedList=[]   自我。ConvertCore (pRootOfTree doubleLinkedList)   返回doubleLinkedList [0]      之前      

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

        类TreeNode:   def __init__(自我,x):   自我。val=x   自我。左=没有   自我。正确的=没有   类解决方案:   def ConvertCore(自我、pRoot lastListNode):   如果pRoot:   如果pRoot.left:   self.ConvertCore (pRoot。左,lastListNode)   pRoot。左=lastListNode [0]   如果lastListNode [0]:   lastListNode [0]。正确的=pRoot   lastListNode [0]=pRoot   如果pRoot.right:   self.ConvertCore (pRoot。对,lastListNode)   def转换(自我,pRootOfTree):   #写代码   如果pRootOfTree==没有:   回来没有   lastListNode=(没有)   自我。ConvertCore (pRootOfTree lastListNode)   虽然lastListNode [0] .left:   lastListNode [0]=lastListNode [0] .left   返回lastListNode [0]      之前      

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

  

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

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