zoukankan      html  css  js  c++  java
  • 第110题:平衡二叉树

    一. 问题描述

    给定一个二叉树,判断它是否是高度平衡的二叉树。

    本题中,一棵高度平衡二叉树定义为:

    一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

    示例 1:

    给定二叉树 [3,9,20,null,null,15,7]

        3

       /

      9  20

        / 

       15   7

    返回 true 。

    示例 2:

    给定二叉树 [1,2,2,3,3,null,null,4,4]

           1

          /

         2   2

        /

       3   3

      /

     4   4

    返回 false 。

    二. 解题思路

    本题思路:采用深度优先遍历+递归自顶而下判断每个节点的左右子树高度是否大于1的方法。

    步骤一:递归得到每个节点左右子树的深度。然后依次比较每个节点,只要有一个节点左右子树深度大于则返回false。否则,返回true。

    三. 执行结果

    执行用时 :6 ms, 在所有 java 提交中击败了5.92%的用户

    内存消耗 :39 MB, 在所有 java 提交中击败了37.88%的用户

    四. Java代码

    class Solution {
        public boolean isBalanced(TreeNode root) {
             if(root==null) {
              return true;
          }else {
           Stack<TreeNode> data=new Stack<TreeNode>();
           data.add(root);
           while(!data.empty()) {
               TreeNode temp=data.pop();
               int rinum=0,lenum=0;
               if(temp.right!=null) {
                   data.push(temp.right);
                   List<TreeNode> rightlist=new ArrayList<TreeNode>();
                   rightlist.add(temp.right);
                   rinum=getTree(rightlist);
    
               }
               if(temp.left!=null) {
                   data.push(temp.left);
                   List<TreeNode> leftlist=new ArrayList<TreeNode>();
                   leftlist.add(temp.left);
                   lenum=getTree(leftlist);
               }
               
               if(Math.abs(lenum-rinum)>1) {
                   return false;
               }          
           }
           return true;
          }
        }
        public int getTree(List<TreeNode> list) {
            if(list.size()==0) {
                return 0;
            }
            
            List<TreeNode> dataList=new ArrayList<TreeNode>();
            for(int i=0;i<list.size();i++) {
                TreeNode tempNode=list.get(i);
                if(tempNode.left!=null) {
                    dataList.add(tempNode.left);
                }
                if(tempNode.right!=null) {
                    dataList.add(tempNode.right);
                }
            }
            return getTree(dataList)+1;
            
        }
    }
  • 相关阅读:
    Navigator对象关于语言的属性
    对ng-repeat的表格内容添加不同样式:ng-style
    ng-repeat
    ES 6 : 函数的扩展
    二维码下载,区分是 ios 和 android
    gulp配置备份
    [转]移动端web页面使用字体的思考
    移动开发总结
    前端优化:雅虎35条
    input填写银行卡号,每四位空一隔
  • 原文地址:https://www.cnblogs.com/xiaobaidashu/p/11840203.html
Copyright © 2011-2022 走看看