2015-07-13 185 views
0

我试图解决树中的问题,并陷入递归并编写代码。 但我不知道为什么它是这样的!有人能帮如何编写 给出了这样的输出 我的计划是X = 0,Y = 0在二叉树中递归

int height1(node *root,int x,int y) 

{ 

int val; 

    if(root==NULL) 
    return 1; 
    else 
    { 
     x=x+height1(root->left,x,y); 
     y=y+height1(root->right,x,y); 
     printf("x=%d and y=%d %d\n",x,y,root->data); 
     if(x>y) 
      return x; 
      else 
       return y; 
    } 

这只是一个粗略的工作,了解递归的流动。树遍历的 输入为50 40 70 45 30 44 48和值

 x y root->data 
     1 1 30 
     2 1 44 
     4 1 48 
     3 4 45 
     1 4 40 
     5  1 70 
     4 5  50 

它为什么会出这样一来,在我的方式,它应该添加Y和X每一次这样的值应该增加,

请给我一些建议,因为每次我解决一个树问题,我总是 卡在递归,任何人都可以建议什么是正确的做法。

我明白,要弄清楚基础条件是重要的,我知道如何找到。但不能得到输出的结果。

我知道这里有很多最有经验的程序员 和我想,请给我一些建议,因为我觉得他们也面临着在递归一些问题,所以他们是如何解决this.How他们解决问题的递归当任何新的来。

我应该参考一些书还是应该解决一些程序。 所以请我想你的建议,所以我可以成为这个好。

+0

这将是一个很多更容易理解,如果你ATLEAST解释是什么(不完全)的代码是应该做的 – Paul

+0

这只是一个粗略的代码来获得程序的流程。当我试图获得树的高度,并坚持这样理解我写了粗糙的代码。 –

回答

1

该代码通常具有相当奇怪的架构。你可以将两个整数论点分开,它们是无用的。下一个问题:此代码不计算除树叶之外的任何节点。而且这段代码也有一些逻辑错误(例如:if(root == NULL) return 1;会导致计数甚至不存在的节点)。一般来说,这可以实现简单得多:

int height1(node *root){ 
    if(root == NULL) 
     return 0; 

    int l = height1(root->left); 
    int r = height1(root->right); 

    return (l < r ? r : l) + 1; 
} 
+0

是的,我知道在函数参数中没有必要,我可以在其他任何地方定义它们,但是你的代码和我的代码会给出相同的输出:)如果是,那么怎么做? –

+0

@SachinGodara不,我不这么认为,尽管这段代码会给出正确的结果。一般来说,打印语句相当混乱,因为节点是从叶子打印到根。我不认为这会产生相同的结果。其实我仍然想知道你的代码中的x和y如何实际上变得大于1 – Paul

+0

我将返回更大的值,并将它添加到以前的x和y值中,这就是我想知道的该代码如何给出这个答案。 –