标签:平衡 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