二叉树的根和节点之间的距离使用递归



我读了一个二叉树中查找两个节点之间距离的算法。在根到节点的距离中,需要给定节点的最低共同祖先。
这段代码在二叉树中查找(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的值?

您需要了解在C/c++中,逻辑或||是短路的:

计算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)

最新更新