一、題目內容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; } }