我试图解决树中的问题,然后陷入递归并编写代码。 但我无法弄清楚为什么它会这样做!有人帮助如何编码 给出了这个输出 我的程序是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,所以值应该增加,
请给我一些建议,因为每次我总是解决一个树问题 坚持递归,任何人都可以建议什么是正确的方法。
我明白要找出基本条件很重要,我知道如何找到。但是不能得到输出的结果。
我知道这里有许多最有经验的程序员 我希望那个请给我一些建议,因为我认为他们在递归时也遇到了一些问题,所以他们如何解决这个问题。他们如何解决任何新问题时的递归问题。
我应该推荐一些书还是我应该解决一些程序。 所以,我想要你的建议,这样我就能在这方面做得很好。
答案 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;
}