Bootstrap

js.相同的树

链接:100. 相同的树 - 力扣(LeetCode)

题目:

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

示例 1:

输入:p = [1,2,3], q = [1,2,3]
输出:true

示例 2:

输入:p = [1,2], q = [1,null,2]
输出:false

示例 3:

输入:p = [1,2,1], q = [1,1,2]
输出:false

提示:

  • 两棵树上的节点数目都在范围 [0, 100] 内
  • -104 <= Node.val <= 104

思路:

层次遍历,如果两棵树结点的值不一样,返回false;

如果结点值相同且不为null,将数组第一个元素的左右结点放入数组队列,删除数组第一个元素;

如果结点值相同且为null,将数组第一个元素删除后,函数continue

代码:

/**

 * 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} p

 * @param {TreeNode} q

 * @return {boolean}

 */

var isSameTree = function(p, q) {

    let arr1 = [p] , arr2 = [q]

    while(arr1.length||arr2.length){

        // 取出两个树的值

        let a = arr1[0]?arr1[0].val:null

        let b = arr2[0]?arr2[0].val:null

        // 比较值,分情况判断

        if(a!=b) return false

        if(a==null){

            arr1.shift()

            arr2.shift()

            continue

        }

        arr1.push(arr1[0].left)

        arr1.push(arr1[0].right)

        arr1.shift()

       

        arr2.push(arr2[0].left)

        arr2.push(arr2[0].right)

        arr2.shift()

        // console.log(2,arr1,arr2)

    }

    return true

};

;