LeetCode-在受污染的二叉树中查找元素
在受污染的二叉树中查找元素
LeetCode-1261
/**
* 给出一个满足下述规则的二叉树:
* root.val == 0
* 如果 treeNode.val == x 且 treeNode.left != null,那么 treeNode.left.val == 2 * x + 1
* 如果 treeNode.val == x 且 treeNode.right != null,那么 treeNode.right.val == 2 * x + 2
* 现在这个二叉树受到「污染」,所有的 treeNode.val 都变成了 -1。
* 请你先还原二叉树,然后实现 FindElements 类:
* FindElements(TreeNode* root) 用受污染的二叉树初始化对象,你需要先把它还原。
* bool find(int target) 判断目标值 target 是否存在于还原后的二叉树中并返回结果。
**/
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<vector>
#include<map>
using namespace std;
// Definition for a binary tree node.
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
/**
0
/ \
1 2
/ \
3 4
**/
class FindElements {
private:
map<int,int>ma;
void DFS(TreeNode* root){
if(root->left){
root->left->val=2*(root->val)+1;
ma[root->left->val]++;
DFS(root->left);
}
if(root->right){
root->right->val=2*(root->val)+2;
ma[root->right->val]++;
DFS(root->right);
}
}
public:
FindElements(TreeNode* root) {
root->val=0;
ma[0]++;
DFS(root);
}
bool find(int target) {
return ma[target];
}
};
int main(){
TreeNode* t1=new TreeNode(-1);
TreeNode* t2=new TreeNode(-1);
TreeNode* t3=new TreeNode(-1);
TreeNode* t4=new TreeNode(-1);
TreeNode* t5=new TreeNode(-1);
t2->left=t4;t2->right=t5;
t1->left=t2;t1->right=t3;
FindElements* obj = new FindElements(t1);
cout<<obj->find(3)<<endl;
system("pause");
return 0;
}
Either Excellent or Rusty