博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指 Offer 55 - II. 平衡二叉树
阅读量:4035 次
发布时间:2019-05-24

本文共 1432 字,大约阅读时间需要 4 分钟。

题目描述

输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。

示例 1:

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

3

/

9 20
/
15 7
返回 true 。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/ping-heng-er-cha-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

Java

常规思路,效率不高

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */ //递归class Solution {
public int depth(TreeNode root){
if(root==null) return 0; return Math.max(depth(root.left),depth(root.right))+1; } public boolean isBalanced(TreeNode root) {
if(root==null) return true; return isBalanced(root.left) && isBalanced(root.right) && (Math.abs(depth(root.left)-depth(root.right))<=1); }}

优化,每个节点只遍历一次

后续遍历,一边遍历一边其记录深度,一边遍历一边判断是否平衡

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */class Solution {
public int isBalance(TreeNode root){
if(root==null) {
return 0; } int left=isBalance(root.left); int right=isBalance(root.right); if(left==-1|| right==-1) return -1; return Math.abs(left-right)>1? -1: Math.max(left,right)+1; } public boolean isBalanced(TreeNode root) {
return isBalance(root)==-1? false:true; }}
你可能感兴趣的文章
Palindrome Partitioning
查看>>
Palindrome Partitioning II
查看>>
python配置libsvm(win7)
查看>>
Q22:栈的压入、弹出序列
查看>>
Q23:从上往下打印二叉树
查看>>
Q24:二叉搜索树的后序遍历序列
查看>>
Q25:二叉树中和为某一值的路径
查看>>
Q27:二叉搜索树与双向链表
查看>>
Best Time to Buy and Sell Stock
查看>>
Binary Tree Zigzag Level Order Traversal
查看>>
ZigZag Conversion
查看>>
[leetcode]:Two Sum
查看>>
leetcode: 3Sum
查看>>
leetcode:3sum closet
查看>>
【剑指offer】面试题37:两个链表的第一个公共结点
查看>>
【剑指offer】面试题39:二叉树的深度
查看>>
【剑指offer】面试题28的习题:正方体,八皇后
查看>>
【剑指offer】面试题42:单词翻转顺序&左右旋转字符串
查看>>
【剑指offer】面试题43:n个骰子的点数
查看>>
堆排序及其相关操作
查看>>