首页 > 其他 > 详细

剑指offer 39. 是否为平衡二叉树

时间:2020-02-20 12:31:38      阅读:54      评论:0      收藏:0      [点我收藏+]

39. 是否为平衡二叉树

题目描述

输入一棵二叉树,判断该二叉树是否是平衡二叉树

 

任意结点的左右子树高度差不大于1就是平衡二叉树。

C++解法

 1 class Solution {
 2 public:
 3     bool flag = true;    // 记录是否为平衡二叉树,不是则为false
 4     bool IsBalanced_Solution(TreeNode* pRoot) {
 5         preOrder(pRoot);
 6         return flag;
 7     }
 8     // 前序递归遍历
 9     int preOrder(TreeNode* pRoot){
10         if(pRoot && flag == true){
11             int leftH = preOrder(pRoot->left);
12             int rightH = preOrder(pRoot->right);
13             if(abs(leftH - rightH) > 1)
14                 flag = false;
15             return ((leftH >= rightH) ? (leftH + 1) : (rightH + 1));
16         }
17         return 0;
18     }
19     
20 };

Java解法

 1 public class Solution {
 2     public boolean IsBalanced_Solution(TreeNode root) {
 3         if(preOrder(root) == -1)
 4             return false;
 5         return true;
 6     }
 7     
 8     // 如果是返回-1, 则表示不是平衡二叉树
 9     public int preOrder(TreeNode root){
10         if(root == null)
11             return 0;
12         int leftH = preOrder(root.left);
13         if(leftH == -1)
14             return -1;        //如果发现子树不平衡之后就没有必要进行下面的高度的求解了
15         int rightH = preOrder(root.right);
16         if(-1 == rightH)       // 如果发现子树不平衡之后就没有必要进行下面的高度的求解了
17             return -1;
18        if((leftH - rightH) > 1 || (leftH - rightH < -1))
19            return -1;
20         return ((leftH >= rightH) ? leftH : rightH) + 1;
21     }
22 }

 

剑指offer 39. 是否为平衡二叉树

原文:https://www.cnblogs.com/hi3254014978/p/12334621.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!