来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/check-balance-lcci 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1。

解答

平衡二叉树鉴定:

  1. 左右子树高度差不超过1
  2. 即左子树的最深高度与右子树的最深高度的高度差不超过1

需要每个节点的左右子树的高度,然后计算高度差是否大于 1

  1. /**
  2. * Definition for a binary tree node.
  3. * function TreeNode(val) {
  4. * this.val = val;
  5. * this.left = this.right = null;
  6. * }
  7. */
  8. /**
  9. * @param {TreeNode} root
  10. * @return {boolean}
  11. */
  12. var isBalanced = function(root) {
  13. let isBalanced = true;
  14. function traverse (node) {
  15. if (!node) return 0;
  16. if (!node.left && !node.right) return 1;
  17. if (isBalanced) {
  18. let left = traverse(node.left);
  19. let right = traverse(node.right);
  20. if (Math.abs(left - right) > 1) {
  21. isBalanced = false;
  22. }
  23. return Math.max(left, right) + 1;
  24. }
  25. }
  26. traverse(root);
  27. return isBalanced;
  28. };