【无标题】leetcode刷题_第一题:

本文介绍了如何通过原地修改二叉搜索树,将其转换为单向链表,同时保持二叉搜索树的性质。讨论了解题思路,包括递归法和栈算法实现,并提供了中序遍历的解题关键。此外,文章还探讨了二叉树的遍历方法和堆栈在Python中的存储方式。
摘要由CSDN通过智能技术生成

 题目链接:

        二叉树数据结构TreeNode可用来表示单向链表(其中left置空,right为下一个链表节点)。实现一个方法,把二叉搜索树转换为单向链表,要求依然符合二叉搜索树的性质,转换操作应是原址的,也就是在原始的二叉搜索树上直接修改。返回转换后的单向链表的头节点

示例:
输入: [4,2,5,1,3,null,6,0]
输出: [0,null,1,null,2,null,3,null,4,null,5,null,6]
提示:
  • 节点数量不会超过 100000。
  • 要求是原址修改,即要直接利用这些已经存在的节点空间,修改指向来得到单向链表。

  • 要求单向链表依然符合二叉搜索树的性质,说是单向链表,其实还是一棵特殊的二叉搜索树,只有右节点的二叉树。

  • 众所周知,对二叉搜索树采用中序遍历就能得到一个升序序列。 那么如果我们在遍历过程中,修改每一个根节点的左右指向,不就实现了原址修改了吗。

解题思路:#可以采用的方法:递归法实现、栈算法实现、中序遍历、深度优先搜索、二叉查找树、分治、动态规划、链表、数组。

### 明天计划:二叉查找树

#示例:[4,2,5,1,3,null,6,0]

 @我的思路的代码,但是太占内存了。还没有进一步优化代码。

存在的问题,重建的节点,没在原址上进行修改,所以超内存。

class TreeNode:
    def __init__(self,x):
        self.val=x
        self.left=None
        self.right=None
class Solution:
    def convertBiNode(self, root: TreeNode):
        if not root :return None
         ##使用中序遍历加上递归操作
        def DFS_(root):
            #先找到最后一个左节点,然后创建树,每次都向里面添加右节点。
            if not root: return None
            myStack=[]#存储根节点,其实是一个栈,输出方式应该为左节点-根节点-右节点
            node = root
            tree_final = None
            cur_node = None  # 初始化当前节点为None
            while node or myStack:
                while node:
                  myStack.append(node)
                  node=node.left
                # print(myStack) 
                node=myStack.pop()
                if not tree_final:
                    tree_final=TreeNode(node.val)
                    cur_node=tree_final
                else:
                    cur_
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值