zoukankan      html  css  js  c++  java
  • 《剑指offer》二叉搜索树和双向链表

    本题来自《剑指offer》 二叉搜索树和双向链表

    题目:

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

    思路:

      采用分治的思想,将一个大的问题分解成较小的几个问题,再分别解决完后合并。

       将树分成三部分,根,左子树,右子树,将左子树中最大的节点,根节点和右子树最小的节点连接起来。

      寻找左子树最大节点和右子树最小节点采用递归,思路既可以

    C++ Code:(尚未解决)

    Python Code:(这个思路借助了辅助存储,不合要求)

    # -*- 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 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

    总结:

  • 相关阅读:
    PHP 反射API
    wamp下mysql错误提示乱码的解法
    PDO、PDOStatement、PDOException
    PHP 常用函数
    TCP/IP
    centOS7+mariadb+Nginx+PHP7.0 安装
    php中引用&的真正理解-变量引用、函数引用、对象引用
    cgi fastcgi php-cgi php-fpm
    03 : linux判断服务器是虚拟机还是物理机
    02 :history命令显示日期-时间-登录IP-用户名
  • 原文地址:https://www.cnblogs.com/missidiot/p/10783636.html
Copyright © 2011-2022 走看看