使用递归

时间:2015-08-30 10:23:26

标签: algorithm recursion binary-tree dynamic-programming

我读了一个算法来找到二叉树中两个节点之间的距离。在从根到节点的距离和给定节点的最低共同祖先是需要的  这段代码在二叉树中找到(从根到给定节点的1 +距离)。

 int Pathlength(Node* root, int n1) {
        if (root != NULL) {
            int x=0;
            if ((root->data == n1) || (x=Pathlength(root->left, n1))>0||(x=Pathlength(root->right, n1))>0) 
            {

                return x + 1;
            }
            return 0;
        }
     return 0;
    }

我不明白的是'x'有两个值,一个来自左子树,另一个来自右子树,它如何知道返回哪个值?
例如,如果树像:

20  
/  \  
8  2

然后致电Pathlength(root, 8)

x=Pathlength(root->left,8)=1  
x=Pathlength(root->right,2)=0  

那么,在语句“return x+1”中,它如何返回正确的x值?

1 个答案:

答案 0 :(得分:1)

你需要在C / C ++中理解,逻辑OR ||是短路的:

评估A || B时,如果A为True,则不评估B(因为无论B是什么,A || B将始终为True。)

在这个表达式中:

(root->data == n1) || (x=Pathlength(root->left, n1))>0||(x=Pathlength(root->right, n1))>0

由于Pathlength(root->left, n1)为1,因此会将其分配给x,x>0的计算结果为True,不再调用x=Pathlength(root->right, n1)