竞赛题6235。逐层排序二叉树所需的最少操作数目
#头条创作挑战赛#题目:
给你一个 值互不相同 的二叉树的根节点 root 。
在一步操作中,你可以选择 同一层 上任意两个节点,交换这两个节点的值。
返回每一层按 严格递增顺序 排序所需的最少操作数目。
节点的 层数 是该节点和根节点之间的路径的边数。
示例 1 :
image.png
输入:root = [1,4,3,7,6,8,5,null,null,null,null,9,null,10]
输出:3
解释: 交换 4 和 3 。第 2 层变为 [3,4] 。 交换 7 和 5 。第 3 层变为 [5,6,8,7] 。 交换 8 和 7 。第 3 层变为 [5,6,7,8] 。
共计用了 3 步操作,所以返回 3 。
可以证明 3 是需要的最少操作数目。
示例 2 :
image.png
输入:root = [1,3,2,7,6,5,4]
输出:3
解释: 交换 3 和 2 。第 2 层变为 [2,3] 。 交换 7 和 4 。第 3 层变为 [4,6,5,7] 。 交换 6 和 5 。第 3 层变为 [4,5,6,7] 。
共计用了 3 步操作,所以返回 3 。
可以证明 3 是需要的最少操作数目。
示例 3 :
image.png
输入:root = [1,2,3,4,5,6]
输出:0
解释:每一层已经按递增顺序排序,所以返回 0 。
提示: 树中节点的数目在范围 [1, 10^5] 。1 <= Node.val <= 10^5 树中的所有值 互不相同 。 思路:
先进行树的层次遍历,再看每一层需要交换的次数。 交换次数的计算可以用一个排好序的数组ordered和一个map. map记录原始树层次上的数的位置。 java代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public int minimumOperations(TreeNode root) { if (root == null) { return 0; } int res = 0; Queue queue = new LinkedList(); queue.offer(root); while (!queue.isEmpty()) { int size = queue.size(); int[] temp = new int[size]; for (int i = 0; i < size; i++) { TreeNode node = queue.poll(); temp[i] = node.val; if (node.left != null) { queue.offer(node.left); } if (node.right != null) { queue.offer(node.right); } } res += exchangeTime(temp); } return res; } private int exchangeTime(int[] temp) { int size = temp.length; if (size <= 1) { return 0; } int[] ordered = new int[size]; System.arraycopy(temp, 0, ordered, 0, size); Arrays.sort(ordered); Map map = new HashMap(size); for (int i = 0; i < size; i++) { map.put(temp[i], i); } int res = 0; for (int i = 0; i < size; i++) { if (ordered[i] != temp[i]) { res++; exchange(temp, map, map.get(ordered[i]), i); } } return res; } private void exchange(int[] temp, Map map, Integer j, int i) { int t = temp[j]; temp[j] = temp[i]; temp[i] = t; map.put(temp[j], j); map.put(temp[i], i); } }
肾结石支架取出痛苦吗?肾结石手术,不管是开刀手术,还是微创的经皮肾镜手术,或者输尿管软镜手术,在手术结束的时候,通常会放一根支架管,两端都是弯曲的,软的小勾,一端在肾盂里面,一端在膀胱里面。作用是引流尿
肩周疼,手指节疼是什么原因?您这种情况要排除以下几种情况1。颈椎病导致肩痛手指痛。颈椎呢,如果存在神经的卡压会诱发肩膀和手指的疼痛,尤其是颈567这几个阶段的椎体的,间盘突出,很容易诱发肩痛和手部的疼痛,有的
苹果官网和天猫旗舰店发货时间差距很大吗?题主的问题是苹果官网和天猫旗舰店发货时间差距大吗。不管是苹果官网和苹果天猫旗舰店的发货时间是一样的,因为苹果他们的供货渠道是一样的用户都知道要购买苹果的产品有这几个渠道,苹果品牌直
多长的工龄可以安心的退休?这问题似乎与工龄问题不大,我认为还是以国家的退休年龄规定为准,到了退休年龄你想继续上班也不可能,所以说,不管你工龄多长,至于到了退休年龄,退休费还不尽人意,不甘心不安心,影响退休后
怎么理解没有油田,哪有东营市这句话?上世纪五十年代在黄河下游尤其是利津垦利一带发现了大区块石油分布与工业油流,国家调度了石油队伍来到这地广人稀的地方开采石油。因开采面积逐年扩大,产量也快速上升,很快成为全国第二大油田
西游记里名气最大的十个美女妖精,你怎么排?说到西游记里面最美的女妖精我很难分辨,但是名气最大的女妖精我却可以明确地分出来,希望大家会喜欢。第十名红麟蟒蛇虽然法力没有练成,但是好歹也是最先吃掉孙悟空的女妖精,上个第十还是没问
朱婷说金软景一直是自己的偶像,金软景则说朱婷一传不如自己,对此你怎么看?我觉得两位球员说的都很对啊,没有必要过度解读背后的意义。朱婷的实力和成绩自然毋庸置疑。作为金软景的后辈,朱婷的态度和表达更说明了她的人品更在球技之上。能够正视自己的短板,承认自身的
中国还会申办奥运会吗?感谢邀请。国际奥林匹克运动会的举办,首先需要雄厚的财力,庞大的人力,以及与国家地位相称的资源与影响力。但是,随着全世界整体经济的不景气,导致众多的国家集体抵触举办奥运会,这其中,也
助听器是什么?助听器是什么?从本质上讲助听器就是一个音频放大器。可能有人会觉得只要把高保真的音频放大电路浓缩到助听器里就可以了。老式助听器基本上就是这样的。实际上这样做存在很多问题。因为单纯把高
中国第一台国产电视是什么牌子的?北京牌。黑白电视机我国第一台黑白电视机诞生在1958年。在大跃进热潮中,天津712厂彩国产电子管心脏一部分当时苏联的元器件生产出了北京牌14英寸黑白电视机。当时我国电视机研制技术与
小米紫米新品充电宝,无线充18w双向快充,售价239元值吗?不亏,但确实略贵!1000mAh,18W双向快充,中规中矩的参数,显然这款无线充电宝与市面上其他充电宝相比略贵,单较小米自家同规格充电宝,足足贵了80元!然而有一点需要注意,紫米这