首页 > 其他分享 >竞赛-03. 重复的彩灯树

竞赛-03. 重复的彩灯树

时间:2022-10-01 18:56:04浏览次数:74  
标签:03 竞赛 val node2 right 彩灯 node1 null root

这个题有bug,最后输出的list不要求顺序,是乱序的,有点无语,导致测试没完全通过

思路:

1、想找到最小的节点,判断他们是否重复,重复的为新的子节点,找到他们的父节点

2、继续上一步判断,从子节点到父节点找

 

 

 

题目-03. 重复的彩灯树

我的提交返回竞赛  
  • 通过的用户数303
  • 尝试过的用户数343
  • 用户总通过次数311
  • 用户总提交次数680
  • 题目难度Medium

有一棵结构为二叉树的圣诞树 root 挂满了彩灯,各节点值表示彩灯的颜色。

如果两棵子树具有 相同的结构 和 相同的彩灯颜色分布,则它们是 重复 的。

请返回这棵树上所有 重复的子树。

 

注意:

  • 对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。

 

示例 1:

输入:root = [1,3,3,null,2,null,2]
输出:[[3,null,2],[2]]

示例 2:

输入:root = [3,3,2,null,2]
输出:[[2]]

示例 3:

输入:root = [1,3,3,null,2,2]
输出:[[2]]

 

提示:

  • 树中的结点数在[1,6000]范围内。
  • -200 <= Node.val <= 200
/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {TreeNode[]}
 */
var lightDistribution = function(root) {
    function isEqual(node1,node2){
        if(node1===null&&node2===null){
            return true
        }else if(node1===null){
            return false
        }else if(node2===null){
            return false
        }
        return node1.val===node2.val&&isEqual(node1.left,node2.left)&&isEqual(node1.right,node2.right)
    }
    let preList=[]
    const parentArr=[]
    const nlist=[root]
    let n=0;
    while(n<nlist.length){
      
        const node=nlist[n]
        if(node.left!==null){
            parentArr[nlist.length]=n
           nlist.push(node.left)
       }
        if(node.right!==null){
            parentArr[nlist.length]=n
             nlist.push(node.right)
        }
        if(node.left===null&&node.right===null){
           preList.push(n)
        }
       n++
   }
    const cArr=[]
    while(preList.length>1){
        const list=[]
        
        for(let i=0;i<preList.length;i++){
            const node=nlist[preList[i]]
            for(let j=i+1;j<preList.length;j++){
                if(isEqual(node,nlist[preList[j]])){
                    if(list.indexOf(preList[i])===-1){
                        list.push(preList[i])
                        cArr.unshift(preList[i])
                    }
                    list.push(preList[j])
                    preList.splice(j,1)
                }
            }
        }
        //得出重复节点的list
        const pList=[]
        for(let i=0;i<list.length;i++){
            const pn=parentArr[list[i]]
            if(pList.indexOf(pn)===-1){
                 pList.push(pn)
            }
        }
        console.log(cArr)
        preList=pList
    }
    
    return cArr.map((a)=>nlist[a])
    
};

 

标签:03,竞赛,val,node2,right,彩灯,node1,null,root
From: https://www.cnblogs.com/caoke/p/16747591.html

相关文章

  • [Algorithm] Kadane's Algorithm
    Writeafunctionthattakesinanon-emptyarrayofintegersandreturnsthemaximumsumthatcanbeobtainedbysummingupalloftheintegersinanon-empty......
  • 【python】Error:'int' object is not callable
    1、问题rpc接口在调用的时候报错   2、原因这个报错的意思就是int转换时,转换的对象不能调用本次错误,主要是因为int(obj.a)写成了int(obj.a()),导致属性获取失败......
  • 竞赛-02. 销售出色区间
    题目-02. 销售出色区间我的提交返回竞赛 通过的用户数291尝试过的用户数447用户总通过次数322用户总提交次数1217题目难度Medium给你一份销售数量表......
  • 竞赛-01. 化学反应
    10月2日上午参加了竞赛,今天先练习下题目-01. 化学反应实验室内有一些化学反应物,其中的任意两种反应物之间都能发生反应,且质量的消耗量为 1:1已知初始 material[......
  • Spring03:展现模型数据、处理及校验表单
    1展现模型数据1.1图解过程在上一节“Spring-02:构建并运行基础Spring应用”中,我们运行的基础应用所展现的视图home.html还未包含任何领域类的信息,如下图:想要构建真实......
  • Windos 找不到 文件'chrome'.请确定文件名是否正确后 再试一次
    一大早上,  然后我去翻路径,  找到路径.  完成修改  最后成功进入   总结setting ===> Tools==>path==>apply,ok......
  • #yyds干货盘点#【愚公系列】2022年10月 Go教学课程 036-类型断言
    一、类型断言1,类型断言的定义GO中的类型断言用于检查接口类型变量所持有的值是否实现了期望的接口或者具体的类型。类型断言的语法格式如下:value,ok:=x.(T)其中,x......
  • 数据库03- pycharm连接mysql
    3,Python连接操作MySQL安装配置git与pycharm连接pycharm从gitee拉取代码从git官网下载新版的git,安装操作可以全部使用默认下一步直到完成。打开pycharm-->setting-->......
  • 光电功能材料--名词解释03
    热词理解1能级能层(英语:Energylevel)理论是一种解释原子核外电子运动轨道的一种理论。它认为电子只能在特定的、分立的轨道上运动,各个轨道上的电子具有分立的能量,这些能......
  • Frida spawn process failed on Android 'Error: VM::AttachCurrentThread failed:
    https://stackoverflow.com/questions/36680128/frida-spawn-process-failed-on-android竟然国内搜不到这个问题。原因是没有将设备resume。办法为device.resume(pid......