面试题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;    }}

这里写图片描述

原创粉丝点击