• 剑指offer 二叉搜索树和双向链表


    剑指offer 牛客网 二叉搜索树和双向链表

    # -*- coding: utf-8 -*-
    """
    Created on Tue Apr  9 18:58:36 2019
    
    @author: Administrator
    题目:
    输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。
    要求不能创建任何新的结点,只能调整树中结点指针的指向。
    思路:
    step1:采用递归中序遍历的方式,将值放在列表中
    step2:遍历将其转换成双向链表
    """
    
    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 pRootOfTree: #判断边界条件,判空
                res = []    #用于存放中序的节点
                res = self.InOrder(res,pRootOfTree) #中序遍历
                for index in range(len(res)-1): 
                    if res[index]:  #当节点不空进入
                        res[index].right = res[index+1] #前向串联
                        res[index+1].left = res[index]  #反向串联
                return res[0]   #返回头结点
            else:   #若为空直接返回
                return None
        #递归的中序遍历
        def InOrder(self,res,pRootOfTree):
            if pRootOfTree: 
                self.InOrder(res,pRootOfTree.left)  #遍历左子节点
                res.append(pRootOfTree)             #将根节点加入到列表中
                self.InOrder(res,pRootOfTree.right) #遍历右子节点
            return res
        #打印双向的链表
        def Print2list(self,head):
            while head:
                print(head.val)
                head = head.right   #从前往后遍历
                #head = head.left   #从后往前遍历
    if __name__ == '__main__':
        solution = Solution()
        #1 2 3 4 5 6 7
        node_left = TreeNode(1)
        node_right = TreeNode(3)
        root_left = TreeNode(2)
        root_left.left = node_left
        root_left.right = node_right
        
        node_left = TreeNode(5)
        node_right = TreeNode(7)
        root_right = TreeNode(6)
        root = TreeNode(4)
        root.left = root_left
        root_right.left = node_left
        root_right.right = node_right
        root.right = root_right
        
        head = solution.Convert(root)  
        solution.Print2list(head)
  • 相关阅读:
    8月工作杂记
    好用的MarkDown编辑器
    Windows下遍历某目录下的文件
    Visual Assist 试用期过期怎么办?
    网易有道面试
    Windows操作系统C盘占用空间过多
    如果有一天我当了面试官
    matlab进行三维重建
    HBase , Doris
    《Java程序设计》第6周学习总结
  • 原文地址:https://www.cnblogs.com/missidiot/p/10679181.html
Copyright © 2020-2023  润新知