c++怎么计算二叉搜索树中第K小的元素

发布时间:2022-03-17 16:05:29 作者:iii
来源:亿速云 阅读:133

这篇文章主要讲解了“c++怎么计算二叉搜索树中第K小的元素”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c++怎么计算二叉搜索树中第K小的元素”吧!

算法:

这类题目的核心思想是,利用二叉树的中序遍历是从小到大的,将其转变成数组,然后对这个有序数组进行取值操作就可以了。

特别注意:转换之后的数组有可能会存在重复的节点,此时的话,我们就需要对数组进行去重的操作。

题目1:二叉树中第二小的节点

代码实现:

/** * Definition for a binary tree node. * type TreeNode struct { *     Val int *     Left *TreeNode *     Right *TreeNode * } */func findSecondMinimumValue(root *TreeNode) int {    res := midOrder(root)    m := make(map[int]int)    for _,v:=range res {        m[v] = v    }       resp := []int{}    for _,v:=range m {        resp = append(resp,v)    }    if len(resp)>=2{        sort.Ints(resp)        return resp[1]    }    return -1}func midOrder(root *TreeNode) (res []int) {    if root == nil {        return    }    res = append(res,midOrder(root.Left)...)    res = append(res,root.Val)    res = append(res,midOrder(root.Right)...)    return}

题目2:二叉搜索树中第K小的元素

代码实现:

/** * Definition for a binary tree node. * type TreeNode struct { *     Val int *     Left *TreeNode *     Right *TreeNode * } */func kthSmallest(root *TreeNode, k int) int {    if root == nil {        return 0    }    res := midOrder(root)     if k > len(res) {        return 0    }    return res[k-1]}func midOrder(root *TreeNode) []int {    if root == nil {        return nil    }    res := []int{}    res = append(res,midOrder(root.Left)...)    res = append(res,root.Val)    res = append(res,midOrder(root.Right)...)    return res }

感谢各位的阅读,以上就是“c++怎么计算二叉搜索树中第K小的元素”的内容了,经过本文的学习后,相信大家对c++怎么计算二叉搜索树中第K小的元素这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. 顺序统计中值---无序找第k大/小值
  2. Python怎么求无序列表中第K的大元素

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++

上一篇:c++环形链表怎么实现

下一篇:c++路径之和实例分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》