【二叉树】二叉搜索树中的中序后继

0x00 题目

给定一棵二叉搜索树和其中的一个节点 p
找到该节点在树中的中序后继
如果节点没有中序后继,请返回 null

节点 p 的后继是值比 p.val 大的节点中键值最小的节点
即按中序遍历的顺序节点 p 的下一个节点


0x01 思路

通过中序遍历获取所有节点
存放在一个数组
再通过循环遍历
查找相同的值
最后再取下一个索引的值即可


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 inorderSuccessor(_ root: TreeNode?, _ p: TreeNode?) -> TreeNode? {
    guard let root = root else { return nil }
    guard let p = p else { return nil }

    var array: [TreeNode] = []

	// 中序遍历
    func inorder(_ root: TreeNode?) {
        guard let root = root else { return }

        inorder(root.left)
        array.append(root)
        inorder(root.right)
    }

    inorder(root)

	// 查找下一个位置的节点
    for i in 0..<array.count {
        if array[i].val == p.val {
            if i+1 < array.count {
                return array[i+1]
            }
        }
    }
    
    return nil
}

0x03 我的小作品

欢迎体验我的作品之一:小笔记-XNote
笔记一步到位!
App Store 搜索即可~


猜你喜欢

转载自blog.csdn.net/xjh093/article/details/126380777