【二叉树】递增顺序搜索树

0x00 题目

给你一棵 二叉搜索树,请你按 中序 遍历
将其重新排列为一棵 递增 顺序搜索树
使树中最 边的节点成为树的 节点
并且每个节点 没有 子节点,只有一个 子节点


0x01 思路

使用 中序 遍历的方式
需要保存 一个节点
前一个节点的 指针
需要指向 当前 节点
当前节点的 指针指向 nil


0x02 解法

语言:Swift

树节点:TreeNode

public class TreeNode {
    public var val: Int
    public var left: TreeNode?
    public var right: TreeNode?
    public init() { self.val = 0; self.left = nil; self.right = nil; }
    public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
    public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
        self.val = val
        self.left = left
        self.right = right
    }
}

解法:

func increasingBST(_ root: TreeNode?) -> TreeNode? {
    // 辅助节点,用来获取 root
    let head = TreeNode()
    
    // 移动节点,用来连接其他节点
    var cur = head

    func bst(_ root: TreeNode?) {
        if root == nil { return }
        
        // 前序遍历位置
        bst(root?.left)
        
        // 中序遍历位置
        
        // 左节点置空
        root?.left = nil
        
        // 前一个节点的 `右` 指针,指向 `当前` 节点
        cur.right = root
        
        // 切换到当前节点
        cur = root!

        bst(root?.right)
        // 后序遍历位置
    }
    
    // 重新排列
    bst(root)
    
    return head.right
}

我的公众号

有点意思哦~
请添加图片描述


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豪冷啊

你的鼓励是对我的认可!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值