110、平衡二叉树
具体实现:
1.明确高度和深度
求深度用前序遍历,高度用后序遍历
2.这道题比较高度用后序遍历
(1)确定递归的参数和返回值
参数:根节点
返回值:传入节点为根节点树的深度
如果当前传入节点为根节点的二叉树不是二叉平衡树了,就返回-1来标记已经不符合平衡树的规则
(2)确定终止条件
遇到空节点终止,返回0,表示当前节点为根节点的树高度为0
(3)确定单层递归的逻辑
左子树高度和右子树高度的差
<=1,返回当前二叉树的高度
否则返回-1
代码:
class Solution { public boolean isBalanced(TreeNode root) { return getHeight(root) != -1; } private int getHeight(TreeNode root){ if (root == null) return 0; int leftHeight = getHeight(root.left); if (leftHeight == -1) return -1; int rightHeight = getHeight(root.right); if (rightHeight == -1) return -1; if (Math.abs(leftHeight-rightHeight) >1) return -1; return Math.max(leftHeight,rightHeight) + 1; } }