一、题目内容java
二叉树平衡检查函数
实现一个函数,检查二叉树是否平衡,平衡的定义以下,对于树中的任意一个结点,其两颗子树的高度差不超过1。 给定指向树根结点的指针TreeNode* root,请返回一个bool,表明这棵树是否平衡
二、题目解析this
平衡二叉树:对于树中的任意一个结点,其两颗子树的高度差不超过1。指针
实现一个求树的高度(深度)的方法,判断左右子树高度差是否大于1。code
实现一个求树的高度(深度)的方法的代码:递归
public int TreeDepth(TreeNode root){ if(root==null) return 0; int left = TreeDepth(root.left);//递归求左子树的高度。 int right = TreeDepth(root.right);//递归求右子树的高度。 return (left>right)?left+1:right+1; //左右子树高度的最大值在加1就是树的高度。 }
实现判断二叉树是否为平衡二叉树的代码以下:it
import java.util.*; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } }*/ public class Balance { public boolean isBalance(TreeNode root) { // write code here if(root==null) return true; int left = depth(root.left); int right = depth(root.right); int dif = left-right; if(dif>1||dif<-1)return false; return isBalance(root.left)&&isBalance(root.right);//判断左右子树是否平衡 } public int depth(TreeNode root){ if(root==null){ return 0; } int left = depth(root.left); int right = depth(root.right); return (left>right)?left+1:right+1; } }