2017-03-10 161 views
0

我寫了一個方法來返回二叉搜索樹的高度。我想從遞歸方法返回height - 1。我通過添加額外的if條件來完成此操作。遞歸:如何從遞歸函數返回值-1

有沒有更好的方法來從遞歸函數中返回value - 1

static int height(Node root) { 
    if (root == null) {  
     return 0; 
    } 

    if (root.left == null && root.right==null) {  
     return 1;    
    } else 
     // I want to return height - 1. 
     // For example if max height is 10, I wanted to return 9. 
     return (1 + Math.max(height(root.left), height(root.right)); 
    } 
} 

回答

3

在你的基地的情況下返回-1和0分別爲:

static int height(Node root) { 
    if(root == null)  
     return -1; 
    if(root.left == null && root.right==null)  
     return 0;    
    else 
     return 1+ Math.max(height(root.left), 
        height(root.right)); 
} 

更新以符合在評論中提及的要求:「如果我想爲單節點空節點,1返回0什麼如果所有其他的高度爲1「。

static int funny_height(Node root) { 
    int h = height(node); 
    return h <= 0 ? h + 1 : h; 
} 
+0

如果我想爲空節點返回0,爲單節點返回1,爲所有其他節點返回height-1會怎麼樣。 對於例如:對於具有7個元素{3,2,1,5,4,6,7}的BST,方法應該返回3而不是4 –

+0

這有點不一致,因爲它給出幾個不同的樹。但是,如果你真的想要,請查看更新。 – Henry

+0

謝謝。我想確保我們必須使用另一個函數來實現這一點,這是遞歸不可能的。你認爲我們可以使用相同的遞歸函數來實現嗎? –