2012-07-18 118 views
0


我对来自Leetscode.com的这个问题感到困惑,这个算法是自顶向下还是按顺序?自上而下或buttom向上?

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

谢谢

回答

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

在这种方法中,树的底部节点将首先创建,树将建成向上

+1

或者,首先创建* root *节点,并且根位于从它们分支出来的树的底部。你见过从树顶伸出来的树,直到它落地为止吗? – 2012-07-18 09:28:06