判断一棵二叉树是否为平衡二叉树
满足条件:左右子树均为平衡二叉树,左右子树的高度差小于等于1
/**
* 判断一棵二叉树是否为平衡二叉树
* 满足条件:左右子树均为平衡二叉树,左右子树的高度差小于等于1
*/
checkIsBalanced(head:TNode):{isBalanced:boolean,height:number}{
if(head == null) return {isBalanced:true,height:0};
let leftData = this.checkIsBalanced(head.left);
let rightData = this.checkIsBalanced(head.right);
let isBalanced = false;
let height = Math.max(leftData.height,rightData.height) + 1;
if(leftData.isBalanced && rightData.isBalanced
&& Math.abs(leftData.height-rightData.height)<2) isBalanced = true
return {isBalanced:isBalanced,height:height};
}
判断一棵二叉树是否为满二叉树
满二叉树:节点个数N和高度h满足:N == 2^h - 1
/**
* 判断一棵二叉树是否为满二叉树(即节点个数N和高度h满足:N == 2^h - 1)
* 方法:求二叉树的节点个数和高度,判断是否满足 N == 2^h - 1
*/
checkIsFull(head:TNode){
if(head == null) return false;
let data = this.ifFull(head);
console.log("data",data,(1 << data.height) - 1);
return data.nodes == ((1 << data.height) - 1);
}
ifFull(head:TNode):{nodes:number,height:number}{
if(head == null) return{nodes:0,height:0}
let leftData = this.ifFull(head.left);
let rightData = this.ifFull(head.right);
let height = Math.max(leftData.height,rightData.height) + 1;
let nodes = leftData.nodes + rightData.nodes + 1;
return {nodes:nodes,height:height};
}