码迷,mamicode.com
首页 > 其他好文 > 详细

"Coding Interview Guide" -- 判断二叉树是否为平衡二叉树

时间:2019-05-18 14:02:20      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:平衡   nod   返回   res   boolean   指南   height   null   turn   

题目

  平衡二叉树的性质为:要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过1。给定一棵二叉树的头节点head,判断这棵二叉树是否为平衡二叉树

 

要求

  如果二叉树的节点数为N,要求时间复杂度为O(N)

 

分析

  平衡二叉树要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过1。平衡二叉树的任一子树也是平衡二叉树,所以如果二叉树的某一节点的左右子树高度差的绝对值超过了1,则该二叉树必定不是平衡二叉树。所以在递归求树高的过程中,计算当前节点的左右子树高度差的绝对值是不是超过了1,如果没有超过,则表明以当前节点为头节点的子树是平衡二叉树,需继续判断其它子树是否为平衡二叉树;如果超过了,说明该二叉树一定不是平衡二叉树,此时不用再继续判断其它子树。

 1 public boolean isBalanceTree(Node head)
 2 {
 3     if(head == null)             // 平衡二叉树可以是空树
 4     {
 5     return true;
 6     }
 7 
 8     boolean[] res = new boolean[1];      // res记录是否为平衡二叉树
 9     res[0] = true;
10     getHeight(head, 1, res);
11     return res[0];
12 }
13 
14 public int getHeight(Node head, int level, boolean[] res)
15 {
16     if(head == null)
17     {
18     return level;
19     }
20 
21     int l = getHeight(head.left, level+1, res);
22     if(!res[0])             // 只要任一子树不是平衡二叉树,则整个二叉树就不是平衡二叉树,直接返回
23     {
24     return level;     
25     }
26     int r = getHeight(head.right, level+1, res);
27     if(!res[0])
28     {
29     return level;
30     }
31     if(Math.abs(l - r) > 1)         // 高度差的绝对值超过1,不是平衡二叉树
32     {
33     res[0] = false;
34     }
35 
36     return Math.max(l, r);
37 }

 

来源:左程云老师《程序员代码面试指南》

 

"Coding Interview Guide" -- 判断二叉树是否为平衡二叉树

标签:平衡   nod   返回   res   boolean   指南   height   null   turn   

原文地址:https://www.cnblogs.com/latup/p/10885369.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!