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
  • 相关阅读:
    UVA 10462 Is There A Second Way Left?(次小生成树&Prim&Kruskal)题解
    POJ 1679 The Unique MST (次小生成树)题解
    POJ 2373 Dividing the Path (单调队列优化DP)题解
    BZOJ 2709 迷宫花园
    BZOJ 1270 雷涛的小猫
    BZOJ 2834 回家的路
    BZOJ 2506 calc
    BZOJ 3124 直径
    BZOJ 4416 阶乘字符串
    BZOJ 3930 选数
  • 原文地址:https://www.cnblogs.com/yucen/p/9912033.html
Copyright © 2011-2022 走看看