题目链接:https://leetcode.com/problems/balanced-binary-tree/
题目:
Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
思路:
根据结点高度,递归判断是否满足平衡树定义。此题跟Kth Smallest Element in a BST 做法类似,在遍历过程中遇到满足某条件的结点时,将结果放到全局变量中,如果没遇到最终递归返回的就是全局变量的初始值,否则返回的变化后的值。 就像一个开关,达到条件时,就变化;没达到条件,就不变。 因为判断每个结点需要求该结点左右高度,所以时间复杂度是O(n^2)。
算法:
public boolean isBalanced(TreeNode root) { if (root == null) return true; int h1 = heightTree(root.left); int h2 = heightTree(root.right); boolean flag = Math.abs(h1 - h2) > 1 ? false : true; if (flag == false) { // 当不满足平衡树定义时,将结果放到全局变量中。 result = false; } // 如果所有结点都平衡,则result不变还时初始值 true isBalanced(root.left); isBalanced(root.right); return result; } public int heightTree(TreeNode p) { if (p == null) return 0; int h1 = heightTree(p.left); int h2 = heightTree(p.right); return h1 > h2 ? h1 + 1 : h2 + 1; }