数据结构和算法实践-树-LeetCode110-平衡二叉树
题目
给定一个二叉树,判断它是否是
平衡二叉树
输入:root = [3,9,20,null,null,15,7]
输出:true
My Thought
题目给定的是判断是否是平衡二叉树,判断平衡二叉树的条件是树的左右高度相差为1:
一、利用递归去遍历
1、边界为节点为null,树高为0;
2、树高的递增规则为,根的左节点和右节点比较值+1
二、为了方便信息传递,需要设置一个实体存储高度和是否
然后再进行递归,递归要注意两个方面:
一、自我调用
二、终止条件:即函数边界
注意点:树、递归
代码示例
JAVA-8
public static class NodeInfo {
int height;
boolean isBalanced;
public NodeInfo(int height, boolean isBalanced) {
this.height = height;
this.isBalanced = isBalanced;
}
}
/**
* 判断平衡二叉树的条件是树的左右高度相差为1
* 一、利用递归去遍历
* 1、边界为节点为null,树高为0;
* 2、树高的递增规则为,根的左节点和右节点比较值+1
* 二、为了方便信息传递,需要设置一个实体存储高度和是否平衡
*
* @param root
* @return
*/
public boolean isBalanced(TreeNode root) {
return process(root).isBalanced;
}
private NodeInfo process(TreeNode root) {
if (root == null) {
return new NodeInfo(0, true);
}
NodeInfo leftNode = process(root.left);
NodeInfo rightNode = process(root.right);
int height = Math.max(leftNode.height, rightNode.height) + 1;
boolean isBalanced = leftNode.isBalanced && rightNode.isBalanced && Math.abs(leftNode.height - rightNode.height) < 2;
return new NodeInfo(height, isBalanced);
}