错误描述:
Line 20: Char 21: runtime error: member access within null pointer of type ‘TreeNode’ (solution.cpp)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior prog_joined.cpp:29:21
这种情况是由于判断条件不完整造成的,要完善条件。
例如 572题:另一棵树的子树
这道题中,以下代码运行会报错:
class Solution {
public:
bool isSubtree(TreeNode* root, TreeNode* subRoot) {
if (root == nullptr) return false;
return S(root, subRoot) || isSubtree(root -> left, subRoot) || isSubtree(root -> right, subRoot);
}
bool S(TreeNode* root, TreeNode* subRoot) {
if (root == nullptr && subRoot == nullptr) return true;
if (root -> val != subRoot -> val) return false;
return S(root -> left, subRoot -> left) && S(root -> right, subRoot -> right);
}
};
判断条件不完善故会报错,还有一种情况是root树或者subRoot子树其中一个为空时必然返回false。
正确代码:
class Solution {
public:
bool isSubtree(TreeNode* root, TreeNode* subRoot) {
if (root == nullptr) return false;
return S(root, subRoot) || isSubtree(root -> left, subRoot) || isSubtree(root -> right, subRoot);
}
bool S(TreeNode* root, TreeNode* subRoot) {
if (root == nullptr && subRoot == nullptr) return true;
if (root == nullptr || subRoot == nullptr) return false;
if (root -> val != subRoot -> val) return false;
return S(root -> left, subRoot -> left) && S(root -> right, subRoot -> right);
}
};