length of the longest increasing path in BST

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; 
  }
}

你可能感兴趣的:(length of the longest increasing path in BST)