每日力扣-树-二叉树的堂兄弟

121 阅读1分钟

在二叉树中,根节点位于深度 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);
        }
    }
};