1. DFS
如果一个节点的左右子节点都是平衡的,并且左右子节点的深度差不超过 1,则可以确定这个节点就是一颗平衡二叉树。
public class Solution {public boolean IsBalanced_Solution(TreeNode root) {if (root == null) return true;//判断左子树和右子树是否符合规则,且深度不能超过2return IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right) && Math.abs(deep(root.left) - deep(root.right)) < 2;}//判断二叉树深度public int deep(TreeNode root) {if (root == null) return 0;return Math.max(deep(root.left), deep(root.right)) + 1;}}
2. 回溯
对于父节点,需要确定两个子节点深度之差小于一。对于作为子节点的立场,需要向自己的上一级节点传递的自己深度。
public class Solution {public boolean IsBalanced_Solution(TreeNode root) {if(deep(root)==-1) return false;return true;}public int deep(TreeNode node){if(node == null) return 0;int left = deep(node.left);if(left == -1 ) return -1;int right = deep(node.right);if(right == -1 ) return -1;//两个子节点深度之差小于一if((left-right) > 1 || (right-left) > 1){return -1;}//父节点需要向自己的父节点报告自己的深度return (left > right ? left:right) + 1;}}
