• 【剑指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
  • 相关阅读:
    7. Reverse Integer
    2. Add Two Numbers
    1039. 顺序存储二叉树
    Codeforces 535D
    Codeforces 385D
    URAL
    URAL
    Codeforces Round #428 (Div. 2)
    鹰蛋坚硬度实验
    Codeforces Round #392 (Div. 2)-D. Ability To Convert
  • 原文地址:https://www.cnblogs.com/yucen/p/9912033.html
Copyright © 2020-2023  润新知