算法篇:树之倒数k个节点
算法:
这类题目的核心思想是,利用二叉树的中序遍历是从小到大的,将其转变成数组,然后对这个有序数组进行取值操作就可以了。
特别注意:转换之后的数组有可能会存在重复的节点,此时的话,我们就需要对数组进行去重的操作。
题目1:
https://leetcode-cn.com/problems/second-minimum-node-in-a-binary-tree/
代码实现:
/**
* 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:
https://leetcode-cn.com/problems/kth-smallest-element-in-a-bst/
代码实现:
/**
* 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
}
执行结果:
备注:这里的算法,从执行表现来看,并不是最优的,不过这算是一种通用的解题思路。
本文分享自微信公众号 - 灰子学技术(huizixueguoxue)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
高阶面试:伯努利过程
这是第43篇原创 写文章耗时 200 分钟 读完仅需10分钟 17世纪法国有个富二代叫洛必达,师从著名数学家约翰·伯努利。洛必达的愿望是成为一名数学家,但是天资不好,在班上成绩一直倒数。当听说老师伯努利正准备结婚但还差点钱时,他写了封信给伯努利表示想重金买他的论文,此时缺钱的伯努利笑开了花。论文发布后洛必达一夜成名,论文就是著名的《洛必达法则》。洛必达死后,伯努利觉得卖亏了,于是把当时的交易信息公布出来,但命名已无法改回。当下每天都有人在课堂上悼念洛必达,不过今天的主角是伯努利。 伯努利家族的发家史是扔骰子和抛硬币,在统计学、概率学、数学上做出了突出的贡献。今天要讲的内容就是著名的《伯努利过程》。 题目:如果你是淘宝直播的研发,如何实时显示观看直播的总人数? 基数 基数(cardinality,也译作势),是指一个数据集中不同元素的个数。例如集合 {1,2,3,1,2} 的基数是3(去重后的个数)。工作中我们常常需要统计网站UV、App日活、微博与朋友圈点赞数、QQ空间访问量、直播观看人数等,都属于基数统计。 一般会用集合统计基数,集合的算法很容易实现,但是特别耗内存。比如李佳琦有一亿...
- 下一篇
没想到 Shell 命令竟然还能这么玩?| Shell 玩转大数据分析
点击上方蓝色字体,关注我 —— 一个在阿里云打工的清华学渣! 关于作者:程序猿石头(ID: tangleithu),现任阿里巴巴技术专家,清华学渣,前大疆后端 Leader。公众号后台回复关键字 “ 1024 ” 获取程序员 大厂面试指南 。 图by: 石头 前奏 上周末团建了,没来得及肝文。跟同事们一起自驾去了秦皇岛阿那亚,吃吃烧烤,玩玩德扑,吹吹海风,很是惬意~ 还学了一款新桌游 —— 阿瓦隆,很有意思,不知道你玩过没? 期间自己还闹了个大乌龙,这让我明白了一个道理:类似这种需要 “隐藏自己真实身份”的推理游戏的秘诀就是彻底忘记自己的身份,不仅能骗过“敌人”,还能让“队友”,甚至让拥有“上帝视角”的“法官” 也懵逼到“怀疑人生”。 另外,本部门最近急招P6/P7技术岗,热烈欢迎感兴趣的同学联系我啊,下次团建咱们一起去,一起来玩德州扑克,我们都很菜的,很容易就能赢咱们。 分享几张本人拍的图片给大家(技术挫了点,大家将就看看)。 正文开始 在前面的这篇文章中 ——优秀的程序员是如何利用工具来提升工作效率的?,石头介绍了可以提高程序猿工作效率的一些软件和工具及相关配置。文中提到了, 程序...
相关文章
文章评论
共有0条评论来说两句吧...