leetcode 1530. 好叶子节点对的数量

leetcode 1530. 好叶子节点对的数量 Problem: 1530. 好叶子节点对的数量两次递归的第一次拿到所有node的父节点哈希表存储第二次遍历所有叶子节点找到满足条件的叶子节点1用状态数组防止重复访问用集合te防止相同的节点对Codeclass Solution { public: unordered_mapTreeNode*, TreeNode* parent; unordered_mapTreeNode*, bool status; vectorTreeNode* leaf; unordered_setstring te; int dis, ans 0; TreeNode* start; string key; void dfs(TreeNode* root, TreeNode* par) { if( root nullptr ) return; parent[root] par; if(root-left nullptr root-right nullptr) { leaf.push_back(root); return; } dfs(root-left, root); dfs(root-right, root); } void recursion( TreeNode* root, int distance ) { if(distance dis) return; if( root nullptr ) return; status[root] true; if(distance 0 root-left nullptr root-right nullptr) { unsigned long long s (unsigned long long)start; unsigned long long r (unsigned long long)root; if(s r) key to_string(s) - to_string(r); else key to_string(r) - to_string(s); if(te.find(key) te.end()) { ans; te.insert(key); } return; } if(status.count(root-left) 0) recursion(root-left, distance 1); if(status.count(root-right) 0) recursion(root-right, distance 1); if(status.count(parent[root]) 0) { recursion(parent[root], distance 1); } } int countPairs(TreeNode* root, int distance) { dfs(root, 0); dis distance; for(int i 0; i leaf.size(); i) { start leaf[i]; status.clear(); recursion(leaf[i], 0); } return ans; } };