zoukankan      html  css  js  c++  java
  • 剑指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)
  • 相关阅读:
    Django中间件
    cookies与session
    Django Form组件
    Django 自定义分页器
    Django 批量插入数据
    Ajax
    图书管理系统
    Django常用字段及参数、事务、数据库查询优化
    Django之F与Q查询
    课堂测试-统计单词个数和字母出现频率
  • 原文地址:https://www.cnblogs.com/missidiot/p/10679181.html
Copyright © 2011-2022 走看看