在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。如果二叉树的两个节点深度相同,但父节点不同,则它们是一对堂兄弟节点。我们给出了具有唯一值的二叉树的根节点 root,以及树中两个不同节点的值 x 和 y。只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true。否则,返回 false。
解题思路:创建节点-深度,节点-父节点两个map,深度优先遍历每次放入。如果map<int,int> parent会报下面这个错误,所以value用TreeNode*。 Char 38: runtime error: member access within null pointer of type 'TreeNode' (solution.cpp)
class Solution {
public:
map<int,int> depth;
map<int,TreeNode*> parent;
bool isCousins(TreeNode* root, int x, int y) {
dfs(root,nullptr);
return (depth[x] == depth[y] && parent[x] != parent[y]);
}
void dfs(TreeNode* root ,TreeNode* par)
{
if(root != nullptr)
{
depth[root->val] = (par == nullptr? 1 : depth[par->val] + 1);
parent[root->val] = par;
dfs(root->left,root);
dfs(root->right,root);
}
}
};