版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
36.平衡二叉树(273)
-
题目描述:输入一棵二叉树,判断该二叉树是否是平衡二叉树。
若一颗二叉树中每一个结点的左、右子树的高度最多相差1,则称此二叉树为平衡二叉树。
-
思路:
-
代码:
package _36.平衡二叉树; /** * 题目描述:输入一棵二叉树,判断该二叉树是否是平衡二叉树。 * * @author Administrator * */ public class BalancedBTree { public boolean IsBalanced_Solution(TreeNode root) { if(root == null) return true; //左子树的高度 int left = depth(root.left); //右子树的高度 int right = depth(root.right); //左右子树的高度差 int differ = left - right; if(differ > 1 || differ < -1){ return false; } return IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right); } /** * 求树的高度 * @param root * @return */ public int depth(TreeNode root){ if(root == null) return 0; int left,right; left = depth(root.left) + 1; right = depth(root.right) + 1; return left > right ? left:right; } public static void main(String[] args) { /** * 5 / \ 3 7 / \ 2 4 / \ 6 8 */ TreeNode root = new TreeNode(5); root.left = new TreeNode(3); root.left.left = new TreeNode(2); root.left.right = new TreeNode(4); root.right = new TreeNode(7); root.left.left.left = new TreeNode(6); root.left.left.right = new TreeNode(8); boolean isBalanced_Solution = new BalancedBTree().IsBalanced_Solution(root); System.out.println(isBalanced_Solution); } } class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } }