
思路:遍历树,同时记录当前节点的父节点和层数,最后对比x,y,如果它俩层数相等,父节点不同,则为true,否则为false;

class Solution {
public:
map<int, pair<int, TreeNode *>> m;
void findParent(TreeNode *root, TreeNode *pre, int x, int layer)
{
if (root->val == x)
{
m[x] = make_pair(layer, pre);
return;
}
if (root->left)
{
findParent(root->left, root, x, layer + 1);
}
if (root->right)
{
findParent(root->right, root, x, layer + 1);
}
}
bool isCousins(TreeNode *root, int x, int y)
{
if (!root)
{
return false;
}
findParent(root, NULL, x, 1);
findParent(root, NULL, y, 1);
if (m[x].first == m[y].first && m[x].second != m[y].second)
{
return true;
}
return false;
}
};
本文介绍了一种通过遍历二叉树来判断两个指定数值的节点是否为堂兄弟节点的方法。具体实现包括记录节点的父节点及层级,并比较两节点的层级与父节点是否符合堂兄弟节点的定义。
555

被折叠的 条评论
为什么被折叠?



