BFC 普解对称二叉树 | 创作者训练营

366 阅读1分钟

为啥是普解,学会 BFC 这个题目真的 10 分钟轻轻松松拿下,没有悬念。如果你还不了解 BFC,可以看这篇文章 有迹可循的 BFS 问题

题目

LeetCode 101 leetcode-cn.com/problems/sy… image.png

分析

BFS 解法,使用一个队列缓存当前层的所有节点,拿到节点后比较正序和 reverse 之后的是否相等。如果中间不相等,直接返回。然后一直遍历直到遍历完所有节点。

实现

BFS 遍历二插树的每一层,然后比较该层的节点是否镜像相等。如果你还不知道如何通过 BFC 遍历二叉树

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {boolean}
 */
var isSymmetric = function(root) {
    //递归结束条件
    // 1.没有子节点,且前面的节点都是堆成的
    // 2.有子节点,但出现了不对称的情况
    if(!root) return true;
    let list = [root];
    let flag = true;

    const dp = (list) => {
        let tmp = [...list].map(item => item ? (item.val != null ? item.val :'null') : 'null');
        if(tmp.join('') != tmp.reverse().join('')) {
            flag = false
            return;
        }

        while(list.length) {
            let len = list.length;
            for(let i = 0; i < len; i++) {
                const node = list.shift();
                if(node) {
                    list.push(node.left);
                    list.push(node.right);
                }
            }
            dp(list)
            
        }   
    }

    dp(list);

    return flag;
};

「 一枚前端学习小透明,努力学习前端知识,同时分享自己对生活的一些思考,欢迎一起讨论交流。如果我的文章对你有帮助,请点个赞,会非常感恩你的鼓励。完」

算法专题其他文章:

动态规划巧解凑零钱问题

有迹可循的 BFS 问题

回溯算法巧解全排列问题

BFC 普解对称二叉树 | 创作者训练营 征文活动正在进行中......