和 (&&) CPP 中的指针

and (&&) of pointers in cpp

本文关键字:指针 CPP      更新时间:2023-10-16

我想知道if(left && right)if(left != NULL && right != NULL)之间的区别

我正在为二叉树的最低共同祖先编写程序,它们都不是 NULL 不会有 和(&&(是1,即(left && right == 1(但我对此得到了错误的答案。

另一方面,if(left!=NULL && right != NULL)工作正常。

我是 cpp 的新手,如果问题太愚蠢,请原谅我。

问题链接代码

失败的测试用例

[3,5,1,6,2,0,8,null,null,7,4] 它是来自 leetcode 的预序遍历

5

TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if(root==NULL||root==p||root==q)return root;
TreeNode* left = lowestCommonAncestor(root->left,p,q);
TreeNode* right = lowestCommonAncestor(root->right,p,q);
if(!left && !right)return NULL;
if(left && root)return root;
// if(left != NULL && right != NULL) return root;  
return left == NULL ? right : left;
}

这仅仅是因为你下面的两个陈述并不等价:

if(left && root)return root;
// if(left != NULL && right != NULL) return root; 

在第一行中,您检查左和根,在第二行中检查左和右

附言(左((左!= NULL(是等效的