判断一棵二叉树是否是平衡二叉树

た 入场券 2022-05-25 12:44 381阅读 0赞

这里写图片描述

  1. class TreeNode {
  2. int val = 0;
  3. TreeNode left = null;
  4. TreeNode right = null;
  5. public TreeNode(int val) {
  6. this.val = val;
  7. }
  8. }
  9. public class Solution {
  10. //解法一:递归的解法
  11. public boolean IsBalanced_Solution(TreeNode root) {
  12. if(root==null)
  13. return true;
  14. return Math.abs(TreeDepth(root.left)-TreeDepth(root.right))>1&&IsBalanced_Solution(root.left)
  15. &&IsBalanced_Solution(root.right)?false:true;
  16. }
  17. //求二叉树的深度
  18. public int TreeDepth(TreeNode node){
  19. if(node==null)
  20. return 0;
  21. return Math.max(TreeDepth(node.left)+1,TreeDepth(node.right)+1);
  22. }
  23. //解法二:优化后的解法
  24. public boolean IsBalanced_Solution2(TreeNode root) {
  25. return TreeDepth2(root)!=-1;
  26. }
  27. public int TreeDepth2(TreeNode node){
  28. if(node==null) return 0;
  29. int left=TreeDepth2(node.left); //从树的最底层进行比较
  30. if(left==-1) return -1;
  31. int right=TreeDepth2(node.right);
  32. if(right==-1) return -1;
  33. return Math.abs(left-right)>1?-1:1+Math.max(left,right);
  34. }
  35. public static void main(String[]args){
  36. //System.out.println("Hello");
  37. TreeNode root=new TreeNode(1);
  38. root.left=new TreeNode(2);
  39. root.right=new TreeNode(3);
  40. root.left.left=new TreeNode(4);
  41. root.left.right=new TreeNode(5);
  42. //root.left.left.left=new TreeNode(6);
  43. // root.left.left.right=new TreeNode(7);
  44. Solution s=new Solution();
  45. System.out.println(s.IsBalanced_Solution2(root));
  46. }
  47. }

发表评论

表情:
评论列表 (有 0 条评论,381人围观)

还没有评论,来说两句吧...

相关阅读