• 《剑指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

    总结:

  • 相关阅读:
    models F Q查询
    Django models 多对多 操作
    Cookies与session的区别
    Form表单验证
    图片上传
    Django进阶
    sql 单个字段去重查询 distinc 和 group by的效率问题
    Django知识点整理
    Web应用请求和响应 HTTP相关
    Django中的几种重定向方式
  • 原文地址:https://www.cnblogs.com/missidiot/p/10783636.html
Copyright © 2020-2023  润新知