LintCode 93-平衡二叉树

本人电子系,只为一学生。心喜计算机,小编以怡情。

平衡二叉树

给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。

思路:
1、写一个求树的高度的子程序
2、层次遍历,每一个点都判断一下左子树高度与右子树高度之差

static  public boolean isBalanced(TreeNode root) {
        // write your code here
        if(root==null) return true;
        //用队列的方法层次遍历树的每一个结点
        Queue<TreeNode> que=new LinkedList<>();
        que.offer(root);
        while(!que.isEmpty())
        {
            TreeNode temp=que.poll();

            //求左子树高度、右子树高度
            int a=getsub(temp.left);
            int b=getsub(temp.right);

            //两者相减,判断是否平衡
            if(Math.abs(a-b)>1) return false;

            //将左节点和右节点放入
            if(temp.left!=null)
            que.offer(temp.left);
            if(temp.right!=null)
            que.offer(temp.right);  
        }
        return true;//都遍历完了都无false就是true
    }

    //递归求树的高度
    static int  getsub(TreeNode root)
    {
        if(root==null) return 0;
        int a=getsub(root.left);
        int b=getsub(root.right);

        return Math.max(a, b)+1;
    }
    原文作者:平衡二叉树
    原文地址: https://blog.csdn.net/Jason__Liang/article/details/54017621
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞