yankewei / LeetCode

LeetCode 问题的解决方法
MIT License
6 stars 0 forks source link

递增顺序搜索树 #135

Open yankewei opened 3 years ago

yankewei commented 3 years ago

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

示例 1:

示例1

输入:root = [5,3,6,2,4,null,8,1,null,null,null,7,9]
输出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]

示例 2:

示例2

输入:root = [5,1,7]
输出:[1,null,5,null,7]

提示:

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/increasing-order-search-tree 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

yankewei commented 3 years ago

深度优先搜索

很明显就是DFS的题目,中序遍历就是,先左,再中间,然后右边。

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func increasingBST(root *TreeNode) *TreeNode {
    ret := &TreeNode{}
    dummy := ret
    var dfs func(r *TreeNode)
    dfs = func (r *TreeNode) {
        if r == nil {
            return
        }

        dfs(r.Left)
        ret.Right = r
        r.Left = nil
        ret = ret.Right

        dfs(r.Right)
    }
    dfs(root)
    return dummy.Right
}