JZ-offer 简单二叉树相关

一、JZ-offer-27 输出二叉树的镜像

左右子节点交换即可,采用递归的思路最简单

function mirrorTree(root){
if(root == null)  return null;
//交换左右子节点,定义一个中间变量,实现交换
let temp = root.left;
root.left = root.right;
root.right = temp;
//往下递归,直到为空
mirrorTree(root.left);
mirrotTree(root.right);

}

二、JZ-offer-55(1) 二叉树的深度

给定一个二叉树,求出二叉树的深度

思路:遍历父节点的左右子节点,取左右子节点的最大深度,然后深度就是左右子节点深度的最大值+1(加的这个1 当然就是父节点这一层咯),也是采用递归的思想,递归终止条件就是为空

function MathDepth(root){
if(root == null)  return 0;
//递归左右节点的深度
let size = 0; //存储深度
let left = MathDepth(root.left);
let right = MathDepth(root.right);
size = Math.max(left,right)+1;
return size
}

三、JZ-offer-55(2) 判断平衡二叉树 

给定一个二叉树,判断是否是平衡二叉树;平衡二叉树的概念:二叉树的任意节点的左右子树的深度不超过1,就是平衡二叉树

function isBalanced(root){
let flag = true;
dfs(root);
retrun flag

 function dfs(root){
    if(root == null) return 0
    let left = dfs(root.left);
    let right = dfs(root.right);
    if(Math.abs(left-right)+1 > 1) return false
    return Math.max(left,right)+1

}

}

四、JZ-offer -25 对称二叉树

判断一个给定的二叉树是不是对称的,是就返回true

分为三种情况:

1、左右都为空--true

2、左边为空或者右边为空--false

3、左右都不为空,&& 左右的val相等&& 左右的子节点也是对称的---true

4、剩下的情况--均为false

function isSymmetric(root){
if(root==null) return null
return dfs(root.left,root.right)

function dfs(root1,root2){
if(root1==null && root2 == null){
return true
}
if(root1==null || root2==null){
return false
}
//左右相等,且他们的子节点都是对称的--才返回true
if(root1.val==root2.val && dfs(root1.left,root2.right) && dfs(root1.right,root2.left)){
return true
}
else{
return false
}
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值