题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
package new_offer; /** * 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 * @author Sonya *思路: *1、借鉴上题 求树的深度。但是效率不高 需要重复遍历结点多次。 *2、后续遍历,记录每个depth 只需要遍历一次。 */ public class N39_IsBalanced_Solution { public boolean IsBalanced_Solution(TreeNode root) { if(root==null) return true; int left=TreeDepth(root.left); int right=TreeDepth(root.right); int val=left-right; if(Math.abs(val)>1)return false; return IsBalanced_Solution(root.left)&&IsBalanced_Solution(root.right); } public int TreeDepth(TreeNode root) { if(root==null)return 0; int left=TreeDepth(root.left); int right=TreeDepth(root.right); if(left>right) return left+1; else return right+1; } public boolean IsBalanced_Solution2(TreeNode root) { int dep = 0; return IsBalanced(root, dep); } public boolean IsBalanced(TreeNode root,int depth) { if(root==null) {depth=0;return true;} int left,right; left=right=0; if(IsBalanced(root.left,left)&&IsBalanced(root.right,right)) { int val=left-right; if(Math.abs(val)>1)return false; depth=(left>right?left:right)+1; } return false; } public static void main(String[] args) { // TODO Auto-generated method stub } }
原文地址:https://www.cnblogs.com/kexiblog/p/11175684.html
时间: 2024-11-08 23:44:42