Leetcode040--是否是平衡二叉树

来源:互联网 发布:招聘程序员 编辑:程序博客网 时间:2024/06/11 02:32

一、原题



Given a binary tree, determine if it is height-balanced. 
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1. 


一、中文



  给定一棵平衡二叉树,判断它是否是高度平衡的。一棵高度平衡的二叉树是左右子树的高度相差不超过1,对其左右子树也是如此。 



三、举例



前序:根-左-右

中序:左-根-右

后序:左-右-根


四、思路



采用的是两次递归的方式,第一次递归使用的是用来判断平衡二叉树,第二次递归是用来获取每个树的深度的,通过这两次的递归就可以实现一个平衡二叉树了的判断了。 




五、程序

 

package code;class TreeNode6{int val;TreeNode6 left;TreeNode6 right;TreeNode6(int x){val = x;}}public class LeetCode57{public static void main(String args[]){TreeNode6 n1 = new TreeNode6(1);TreeNode6 n2 = new TreeNode6(2);TreeNode6 n3 = new TreeNode6(3);TreeNode6 n4 = new TreeNode6(3);TreeNode6 n5 = new TreeNode6(4);TreeNode6 n6 = new TreeNode6(5);TreeNode6 n7 = new TreeNode6(6);n1.left = n2;n2.right = n3;n3.left = n4;n1.right = n5;n4.left = n7;//n3.right = n6;System.out.println("是否是平衡二叉树:"+isBalanced(n1));}public static Boolean isBalanced(TreeNode6 root){if(root == null){return true;}int leftDeep = getDeep(root.left);int rightDeep = getDeep(root.right);if((leftDeep - rightDeep > 1) || (leftDeep - rightDeep < -1)){return false;}else{return isBalanced(root.left) && isBalanced(root.right);}}public static int getDeep(TreeNode6 root){if(root == null){return 0;}if(root.left == null && root.right == null){return 1;} else {            int left = getDeep(root.left);            int right = getDeep(root.right);            return 1 + (left > right ? left : right);}}}



-------------------------------------------------output-------------------------------------------------


是否是平衡二叉树:false




1 0
原创粉丝点击