面试36题:
题:二叉搜索树与双向链表
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
解题思路:由于输入的一个二叉搜索树,其左子树大于右子树的值,这位后面的排序做了准备,因为只需要中序遍历即可,将所有的节点保存到一个列表,。对这个list[:-1]进行遍历,每个节点的right设为下一个节点,下一个节点的left设为上一个节点。
解题代码:(注意:attr列表中的元素是链表节点)
# -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def Convert(self, pRootOfTree): # write code here if not pRootOfTree: return self.attr=[] self.inOrder(pRootOfTree) for i,v in enumerate(self.attr[:-1]): self.attr[i].right=self.attr[i+1] self.attr[i+1].left=v return self.attr[0] def inOrder(self,root): if not root: return self.inOrder(root.left) self.attr.append(root) self.inOrder(root.right)
原文地址:https://www.cnblogs.com/yanmk/p/9220765.html
时间: 2024-11-16 09:16:47