我们从两道题出发总结二叉树题型思考方向
leetcode110. 平衡二叉树:
题目很容易,讲这道题是为了记录一下写递归函数的技巧
首先如果发现该题后序遍历,自底向下返回子树高度。那么易解
class Solution {
public boolean isBalanced(TreeNode root) {
return recur(root) != -1;
}
//函数作用:求子树高度,不是平衡树时返回-1
private int recur(TreeNode root) {
//终止条件,没有节点子树自然高度为0
if (root == null) return 0;
//根据函数作用可以知道函数会返回left和right,不要想函数怎么求的,当作黑盒,然后利用left和right去写代码完成函数
int left = recur(root.left);
int right = recur(root.right);
//已知left和rigth,决定返回值。
//若子树是平衡树 返回该子树的子树的最大高度+1( max(left, right) + 1) 若不是返回-1。
//这是根据函数作用来写的
if(left == -1) return -1;
if(right == -1) return -1;
return Math.abs(left - right) < 2 ? Math.max(left, right) + 1 : -1;
}
}