Find the length of the longest increasing path in the binary search tree
这题简单,recursion 搞一搞。弄一个int[]来模拟全局变量。
先问左孩子要它的最大的一支向上增序,再问右孩子要它最大的一支向下增序。
然后用人字形path 来更新结果。
recursion返回最大的向上增序,
class Solution {
public int longestPath(TreeNode root) {
int[] ans = new in[1];
helper(root, ans);
return ans[0];
}
private int[] helper(TreeNode root, int[] ans) {
if (root == null) return new int[]{0, 0};
int[] lenLeft = helper(root.left, ans);
int[] lenRight = helper(root.right, ans);
ans[0] = Math.max(ans[0], lenLeft[0] + lenRight[1] + 1);
return new int[] { 1 + lenLeft[0], 1 + lenRight[1] };
}
}
对于recursion函数调用后的返回值数组,其实两个数组里面只有一个是有用的。所以还可以再优化一下。
class Solution {
public int longestPath(TreeNode root) {
int[] ans = new in[1];
helper(root, ans, true);
return ans[0];
}
private int helper(TreeNode root, int[] ans, boolean isLeft) {
if (root == null) return 0;
int lenLeft = helper(root.left, ans, true);
int lenRight = helper(root.right, ans, false);
ans[0] = Math.max(ans[0], lenLeft + lenRight + 1);
//如果我们知道是我们要的是左边那一支, 就返回左边的,要么返回右边的。
return isLeft ? lenLeft + 1 : lenRight + 1;
}
}