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;
            
        }
    }
  • 相关阅读:
    常用网址记录
    css一些兼容问题
    css hack
    js 闭包
    js 继承
    js 实现淘宝放大镜
    css做三角形的方法
    js 轮播效果
    css3特效
    css布局
  • 原文地址:https://www.cnblogs.com/xiaobaidashu/p/11840203.html
Copyright © 2011-2022 走看看