第110题:平衡二叉树

Posted xiaobaidashu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第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;
        
    }
}

 

以上是关于第110题:平衡二叉树的主要内容,如果未能解决你的问题,请参考以下文章

第110题:平衡二叉树

LeetCode Java刷题笔记—110. 平衡二叉树

代码随想录算法训练营第17天 | ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之和

⭐算法入门⭐《二叉树 - 平衡二叉树》简单01 —— LeetCode 110. 平衡二叉树

LeetCode110. 平衡二叉树

每天一道leetcode-110平衡二叉树