二叉树中的递归

时间:2015-07-13 10:53:02

标签: algorithm recursion tree

我试图解决树中的问题,然后陷入递归并编写代码。 但我无法弄清楚为什么它会这样做!有人帮助如何编码 给出了这个输出 我的程序是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,所以值应该增加,

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

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

我知道这里有许多最有经验的程序员 我希望那个请给我一些建议,因为我认为他们在递归时也遇到了一些问题,所以他们如何解决这个问题。他们如何解决任何新问题时的递归问题。

我应该推荐一些书还是我应该解决一些程序。 所以,我想要你的建议,这样我就能在这方面做得很好。

1 个答案:

答案 0 :(得分: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;
}