zoukankan      html  css  js  c++  java
  • 【剑指Offer】27二叉搜索树与双向链表

    题目描述

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

    时间限制:1秒;空间限制:32768K

    解题思路

    递归思路。先解决输入为空的特殊情况;遇到叶子节点则返回节点;左子树递归,将左子树转换后结果的最大值即最右的值与根节点的left连接;再将右子树递归,将右子树转换后结果的最小值即最左的值(链表头值)与根节点的right连接;最后返回的是左子树递归结果的链表头。

    # -*- 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 == None:
                return pRootOfTree
            if pRootOfTree.left==None and pRootOfTree.right==None:
                return pRootOfTree
            
            # 左子树递归
            left = self.Convert(pRootOfTree.left)
            p = left
            if left!= None:
                while p.right != None:
                    p = p.right
                # 找到最大值,即最右的值,和根节点连接
                p.right = pRootOfTree
                pRootOfTree.left = p
                
            # 右子树递归
            right = self.Convert(pRootOfTree.right)
            if right!= None:
                # 找到最小值,即最左的值(链表头值)和根节点连接
                right.left = pRootOfTree
                pRootOfTree.right = right
            
            if left != None:
                return left
            else:
                return pRootOfTree
  • 相关阅读:
    python中类方法、类实例方法、静态方法的使用与区别
    在python里如何动态添加类的动态属性呢?
    PYTHON基础
    EXCEL 写入
    thread 多线程
    Python 常用函数
    列表减列表
    04_Linux搭建Jdk和tomcat环境
    自动生成和安装requirements.txt依赖
    python+selenium面试题
  • 原文地址:https://www.cnblogs.com/yucen/p/9912033.html
Copyright © 2011-2022 走看看