【问题标题】:Recursion in Binary Tree二叉树中的递归
【发布时间】:2015-07-13 19:12:44
【问题描述】:

我试图解决树中的一个问题,并陷入递归并编写代码。 但我不明白为什么它会发出这个!有人帮助如何编码 给出这个输出 我的程序是 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,所以值应该增加,

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

我知道找出基本条件很重要,而且我知道如何找到它。但无法知道输出是如何产生的。

我知道这里有很多最有经验的程序员 我想请给我一些建议,因为我认为他们在递归方面也遇到了一些问题,所以他们如何解决这个问题。当有新问题出现时,他们如何解决递归问题。

我应该参考一些书还是应该只解决一些程序。 所以,我需要你的建议,这样我才能在这方面做得很好。

【问题讨论】:

  • 如果您至少解释了(不完整的)代码应该做什么,这将更容易理解
  • 只是获取程序流程的粗略代码。当我试图获得树的高度并卡住以便理解时,我写了那个粗略的代码。

标签: algorithm recursion tree


【解决方案1】:

一般来说,这段代码有一个相当奇怪的架构。您可以将两个 int 参数放在一边,它们没用。下一个问题:此代码不计算除叶子之外的任何节点。而且这段代码也有一些逻辑错误(例如: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;
}

【讨论】:

  • 是的,我知道函数参数中不需要,我可以在其他任何地方定义它们,但是你的代码和我的代码会给出相同的输出:) 如果是,那么如何?
  • @SachinGodara 不,我不这么认为,尽管这段代码会给出正确的结果。一般来说,打印语句相当混乱,因为节点是从叶子打印到根的。我认为它不会产生相同的输出。实际上,我仍在尝试了解您的代码中的 x 和 y 如何实际上可以大于 1
  • 我正在返回更大的值,并将其添加到以前的 x 和 y 值中,这就是我想知道这段代码如何给出这个答案的原因。
  • @SachinGodora 我了解代码的基本思想,因为它与我的相同。我的算法甚至以与您相同的顺序遍历树。我想我得到了 xy 的东西(至少这些值是如何生成的),尽管我仍然不明白它背后的目的
  • 说实话我只是在写一个代码来获得高度,我一步一步写代码,然后来到这个代码,我知道这是错误的,但我只是卡住了编译器为何以及如何显示此输出,如何编程流程,因为每次我尝试解决树木问题时,我都会坚持相同的想法,为什么我要问这个,该程序的流程如何,以及我应该如何每次看到递归问题(新问题)都要处理吗?经验丰富的程序员怎么想?如果是的话,我应该参考一些书吗?这就是我问这个的原因。
猜你喜欢
  • 2016-04-19
  • 2014-03-29
  • 2010-12-07
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
  • 2015-09-19
  • 2011-05-08
相关资源
最近更新 更多