面试题39(2). 判断是否为平衡二叉树
来源:互联网 发布:淘宝卖死人衣服视频 编辑:程序博客网 时间:2024/05/22 06:13
面试题39(2). 判断是否为平衡二叉树
题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
以下引自百度百科:
平衡二叉树:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
思路1:
根据二叉树的深度,可以分别求左右两个子树的高度,然后计算高度差,如果高度差不超过1,那么继续判断左子树和右子树是否是平衡二叉树
这种方法有一个缺点,从根往下求树的深度时,需要多次遍历同一个节点。
比如,我们求根节点的左右子树的高度,会遍历一遍左右子树。当我们求根节点左子树的高度时,会再次遍历左子树。
public class Solution { public int depth(TreeNode node) { if(node == null) { return 0; } return Math.max(depth(node.left), depth(node.right)) + 1; } public boolean IsBalanced_Solution(TreeNode root) { if(root == null) { return true; //空树居然是true } int left_depth = depth(root.left); int right_depth = depth(root.right); if(Math.abs(left_depth-right_depth) > 1) { return false; } return IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right); }}
思路2:
后序遍历二叉树,在遍历时,判断左右子树的高度差。
代码写得渣 ╮(╯﹏╰)╭
public class Solution { boolean flag = true; public int core(TreeNode root) { if(root == null || !flag) { return 0; } int left = core(root.left); int right = core(root.right); if(left != 0 || right != 0) { if(Math.abs(left-right) <= 1) { return Math.max(left, right) + 1; }else { flag = false; } } return 1; } public boolean IsBalanced_Solution(TreeNode root) { if(root == null) return true; core(root); return flag; }}
阅读全文
0 0
- 面试题39(2). 判断是否为平衡二叉树
- 剑指Offer----面试题39(2):判断是否为平衡二叉树
- 剑指Offer系列-面试题39-2:判断一棵树是否为平衡二叉树
- 剑指offer 面试题39 求二叉树深度|判断是否为平衡二叉树
- 【面试题】剑指Offer-39-求二叉树的深度和判断一颗树是否为平衡二叉树
- 面试题39:平衡二叉树判断
- [各种面试题] 判断是否平衡二叉树
- 面试题39:获得二叉树深度和判断是否是平衡二叉树
- 数据结构面试题/判断一棵二叉树是否是平衡二叉树
- 面试题39_2 判断一棵树是不是平衡二叉树
- 判断二叉树是否为平衡树
- 判断树是否为平衡二叉树
- 判断二叉树是否为平衡树
- 判断树是否为平衡二叉树
- 判断二叉树是否为平衡树
- 判断树是否为平衡二叉树
- 判断一棵树是否为平衡二叉树
- 判断是否为平衡二叉树
- jQuery实现用户信息表格的添加、删除操作
- 51Nod 1241 特殊的排序
- 设计模式之禅—23种设计模式详解_1 单例模式
- http协议,请求报文,响应报文格式思维导图
- python-
- 面试题39(2). 判断是否为平衡二叉树
- (CSU
- 异步任务利器Celery(一)介绍
- angular表格排序(查询)
- 动态内存管理和智能指针 2.0 -- shared_ptr
- 什么时候用相对定位或绝对定位
- 设计模式之策略模式-Strategy Pattern
- 【2017 ACM/ICPC Asia Regional Shenyang Online 1004】hdu 6197 array array array
- C#day2