最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 前端就该用 JS 刷算法2

    正文概述 掘金(厨猿加加)   2021-01-03   419

    题目

    翻转二叉树以匹配前序遍历

    过程

    • 在最开始做题的时候,是想根据完全二叉树的方式来判断左右节点的值是否需要翻转,但是 voyage 并不会将所有 null 节点引入,所以找的 pos 和 voyage 数组的 index 是不匹配的,所以方案挂掉了
    • 然后考虑的问题都是根节点的值不变,考察左右节点的值,导致对题目理解出现了偏差
    • 题目说的翻转是整个子树都翻转,也就是如果某个节点 root 需要翻转,那么它的前序遍历就是先右后左,否则就是正常的先左后右
    • 所以我们只需要按需先序遍历即可
    • 能左走就左走,不能就右走,每次走完右子树要判断一下下一个 pos 是否和左树节点的值一致,如果一致,那证明可以先右走再左走
    • 最后只需要判断一下 pos 和 voyage 的长度是否一致,就可以知道有没有遍历全树
    // https://leetcode-cn.com/problems/flip-binary-tree-to-match-preorder-traversal/
    /**
     * 
     * @分析
     * 1. 翻转的概念:交换节点 root 的左右节点
     * 2. 反转最少的树中节点
     * 
     */
    var flipMatchVoyage = function (root, voyage) {
        let res = []
        let pos = 0
        const dfs = (root) => {
            // 只有当根节点相等的时候才会继续走,只是为了判断根节点
            if (root.val !== voyage[pos]) return
            pos++
            // 前序遍历
            if (root.left && root.left.val === voyage[pos]) {
                dfs(root.left)
            }
            if (root.right && root.right.val === voyage[pos]) {
                // 走右侧的树了
                dfs(root.right)
                // 走完之后再测一下是否是需要交换,如果是正常走,这个条件是不能触发的
                if (root.left && root.left.val === voyage[pos]) {
                    res.push(root.val)
                    // 继续走左树
                    dfs(root.left)
                }
            }
        }
        dfs(root)
        if(pos !== voyage.length){
            // 没有走完,所以不符合可翻转得到前序遍历这种情况
            return [-1]
        }
        return res
    };
    

    小结

    第二天刷中等的没遇到过的树题,还是没有在 1h 做出来,最后是看题解完成的,所以对于树题还是不够熟悉,明天需要先将树的文章再过一遍再做题目


    起源地下载网 » 前端就该用 JS 刷算法2

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元