Recursion 树中的递归

Recursion 树中的递归,recursion,Recursion,我试图理解递归程序 任何人请解释尺寸()的工作原理。它如何递归返回节点数。 int size(struct tree *root) { if (root==NULL) return 0; else { return (size(root->left)+size(root->right)+1); } }: 在这个程序中,size(root->left),size(root->r

我试图理解递归程序
任何人请解释尺寸()的工作原理。它如何递归返回节点数。

int size(struct tree *root)  
  {   
     if (root==NULL)
      return 0;    
     else    
     {    
      return (size(root->left)+size(root->right)+1);   
     }
}:
在这个程序中,size(root->left),size(root->right)将返回什么

在阶乘程序中

function factorial (x)    
{    
return (x * factorial(x-1) ) ;    
}    
在这个阶乘程序中,它将返回4*3*2*1。如果我们计算阶乘(4)。
在上面的树程序中,什么应该返回该节点的值。为什么返回节点数?而不是该节点的值。
请解释。

大小函数计算树中的节点数(完全独立于节点值)。递归之所以有效,是因为如果树根为NULL,则返回0(基本情况)。如果根不为NULL,则它有一个左和右子级(都是树)。因此,总大小将是左子树的大小(即大小(根->左))+右子树的大小(即大小(根->右))+根节点的大小(即1)。

您的程序从未读取节点的值。而是计算节点数


到达null时返回0。当计算右子树和左子树中的所有节点时,它会加1,并返回最终的和。

为什么它会返回“节点值”(不管是什么)?它是否在其主体的任何位置读取“节点值”?@Mat Yes程序没有读取值,但我仍然不明白为什么它会返回树中的节点数。请解释。只需用纸+铅笔和一些小树“模拟”它。你们会看到它的作用。唯一我无法理解的是size()如何返回节点数。