我对来自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;
}
谢谢
答案 0 :(得分:1)
这是一种自上而下的方法。该算法将中间元素放在一个节点中,然后构建左右子树。首先创建 top 节点,然后树向下向下。
在自下而上的方法中,首先创建左子树和右子树,然后将它们添加到其父树中。它会是这样的:
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;
}
在这种方法中,首先创建树的 bottom 节点,然后将向上构建树。