Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Definition for a binary tree node.
- * struct TreeNode {
- * int val;
- * TreeNode *left;
- * TreeNode *right;
- * TreeNode() : val(0), left(nullptr), right(nullptr) {}
- * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
- * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
- * };
- */
- class Solution {
- public:
- bool contains(TreeNode* root,TreeNode* node){
- if(root==nullptr){
- return false;
- }
- if(root==node){
- return true;
- }
- // if(root->left!=nullptr){
- // return contains(root->left,node);
- // }
- // if(root->right!=nullptr){
- // return contains(root->right,node);
- // }
- if(contains(root->left,node)==false&&contains(root->right,node)==false){
- return false;
- }
- return true;
- }
- TreeNode* lcaDeepestLeaves(TreeNode* root) {
- map<TreeNode*,int> m;
- queue<TreeNode*> q;
- q.push(root);
- int depth=0;
- while(!q.empty()){
- int size=q.size();
- for(int i=0;i<size;i++){
- TreeNode* node=q.front();
- q.pop();
- m[node]=depth;
- if(node->left!=nullptr){
- q.push(node->left);
- }
- if(node->right!=nullptr){
- q.push(node->right);
- }
- }
- depth++;
- }
- vector<TreeNode*> deepest;
- deepest.push_back(root);
- for(auto iter:m){
- TreeNode* m1=deepest[0];
- if(m[iter.first]>m[m1]){
- deepest.clear();
- deepest.push_back(iter.first);
- }else if(m[iter.first]==m[m1]){
- deepest.push_back(iter.first);
- }
- }
- for(auto iter:deepest){
- cout<<iter->val<<' ';
- }
- TreeNode* ans=root;
- for(int i=0;i<=m[deepest[0]];i++){
- bool flag=true;
- //left
- for(auto iter:deepest){
- if(flag&&contains(iter->left,iter)){
- }else{
- flag=false;
- }
- }
- if(flag){
- ans=ans->left;
- continue;
- }
- for(auto iter:deepest){
- if(flag&&contains(iter->right,iter)){
- }else{
- flag=false;
- }
- }
- if(flag){
- ans=ans->right;
- continue;
- }
- else{
- break;
- }
- }
- return ans;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement