0


我对来自 Leetscode.com 的这个问题感到困惑,这个算法是自上而下还是自上而下?

public static TreeNode addToTree(int arr[], int start, int end){ 
  if (end < start) {
    return null;
  }
 int mid = (start + end) / 2;
 TreeNode n = new TreeNode(arr[mid]); 
 n.left = addToTree(arr, start, mid - 1); 
 n.right = addToTree(arr, mid + 1, end); 
 return n;
}

谢谢

4

1 回答 1

1

这是一种自上而下的方法。该算法将中间元素放在一个节点中,然后构建左右子树。所以首先创建顶部节点,然后树向下生长。

在自底向上的方法中,将首先创建左右子树,然后将它们添加到其父级。它会是这样的:

public static TreeNode addToTree(int arr[], int start, int end){ 
    if (end < start) {
        return null;
    }

    int mid = (start + end) / 2; 
    TreeNode left = addToTree(arr, start, mid - 1); 
    TreeNode right = addToTree(arr, mid + 1, end); 
    TreeNode n = new TreeNode(arr[mid]);
    n.left = left;
    n.right = right;
    return n;
}

在这种方法中,首先创建树的底部节点,然后向上构建树。

于 2012-07-18T04:44:30.020 回答