2025年-G11-Lc85-110.平衡二叉树-java版
1.题目描述
2.思路
思路1:
思路2:
二叉树中求高度的常见模板要记住,树节点类型,传入节点node
平衡二叉树和不平衡二叉树举例:
思路3: 高度定义是从根节点到叶子节点的高度,但是计算的时候从叶子节点开始算(0层),所以要+1
思路4:从根节点开始递归高度的时候,用root=-1来代表不平衡的子树。root=0只能说明是空树,。
height(TreeNode node) 方法的参数 node 是一个 TreeNode 类型的引用,指向某个具体的 TreeNode 对象。在方法内部,您可以通过该引用访问和修改这个对象的属性。
在 Java 中,当方法的参数是对象类型时,传递的是对象的引用。这里的“对象”指的是内存中实际存储的数据实体,例如定义的 TreeNode 实例。而“引用”是指向该对象的内存地址的变量。将对象作为参数传递给方法时,方法接收到的是该对象引用的副本,即指向同一对象的内存地址。因此,在方法内部对该对象的修改会影响到原始对象。
3.java代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean isBalanced(TreeNode root) {
return height(root)!=-1;
//用总高度-1代表不是不平衡树;也就是高度差是0,1..... 都可以返回true
}
private int height(TreeNode node)
{//方法的参数node是对对象的引用
if(node==null)
{
return 0;//如果节点为空代表空子树,高度为0,也可以是不平衡树
}
int leftheight=height(node.left);
int rightheight=height(node.right);
//1.如果左子树不平衡或者右子树不平衡,直接返回-1;还有一种情况是违反定义,就是左右子树高度差大于1
if(leftheight==-1||rightheight==-1||Math.abs(leftheight-rightheight)>1)
{
return -1;
}
// 2.否则,返回当前节点的高度
return Math.max(leftheight,rightheight)+1;
}
}