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

【二叉树】递增顺序搜索树,第1张

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
}

我的公众号

有点意思哦~


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/993428.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存