【day15】二叉树层序遍历,翻转二叉树,对称二叉树

二叉树层序遍历

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
请添加图片描述

输入:root = [3,9,20,null,null,15,7] ,输出:[[3],[9,20],[15,7]]
输入:root = [1] ,输出:[[1]]
输入:root = [], 输出:[]

引用队列来实现,队列先进先出,从左到右一层一层遍历,

/**
 * 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 {number[][]}
 */
var levelOrder = function(root) {
    if(root == null) {
        return [];
    }
    let result = [];
    let queue = [];
    queue.push(root);
    while(queue.length > 0){
        let size = queue.length;
        let arr = [];
        while(size--){
            let node = queue[0];
            let value = queue.shift().val;
            arr.push(value);
            if(node.left != null){
                queue.push(node.left);
            }
            if(node.right != null){
                queue.push(node.right);
            }
        }
        result.push(arr);
    }
    return result;
};

翻转二叉树

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
请添加图片描述

输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]

var invertTree = function(root) {
    if(root == null){
        return root;
    }
    treeNode(root);
    return root;
};

var treeNode = function(root){
    if(root == null){
        return
    }
    let temp = root.left;
    root.left = root.right;
    root.right = temp;
    treeNode(root.left);
    treeNode(root.right);
}

对称二叉树

给你一个二叉树的根节点 root , 检查它是否轴对称。
请添加图片描述

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

判断是否对称,比较左右子树外层结点是否相等,
使用递归法,
递归函数的参数和返回值,参数为(左子树的左节点,右子树的右节点),(左子树的右节点,右子树的左节点),返回值true /false;
递归终止条件,root 值为null,比较结果返回true or false;
确定单层递归的逻辑,if左子树右子树都为空返回true, 有一个为空,有一个不为空,直接判定为不对称返回false;都不为空value值不相等直接判定为不对称返回false;
都不为空且值相等,进入下一个递归,
左子树的左节点,右子树的右节点)与(左子树的右节点,右子树的左节点)相等都返回为true则该二叉树为对称二叉树;

/**
 * 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 {boolean}
 */
var isSymmetric = function(root) {
    return compareNode(root.left,root.right);

};
var compareNode = function(root1,root2){
    if(root1 == null && root2 == null){
        return true;
    }
    else if((root1 != null && root2 == null) || (root1 == null && root2 != null)){
        return false
    }
    else if(root1.val != root2.val){
        return false;
    }

    else if(root1.val === root2.val){

        var compare1 =  compareNode(root1.left,root2.right)
        var compare2 = compareNode(root1.right,root2.left);
        return compare1 && compare2;
    }
    
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值