Skip to content

Commit fac9f9f

Browse files
authored
Create 2096. Step-By-Step Directions From a Binary Tree Node to Another
1 parent 678ad90 commit fac9f9f

File tree

1 file changed

+95
-0
lines changed

1 file changed

+95
-0
lines changed
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
8+
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
9+
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
10+
* };
11+
*/
12+
class Solution {
13+
public:
14+
15+
void f(TreeNode *root,bool &get,string &str,int st){
16+
if(get){
17+
str.pop_back();
18+
return;
19+
}
20+
if(!root){
21+
str.pop_back();
22+
return;
23+
}
24+
if(root->val == st){
25+
get = true;
26+
return;
27+
}
28+
str+='L';
29+
f(root->left,get,str,st);
30+
if(get) return;
31+
str+='R';
32+
f(root->right,get,str,st);
33+
if(get) return;
34+
str+='U';
35+
str.pop_back();
36+
str.pop_back();
37+
}
38+
string getDirections(TreeNode* root, int startValue, int destValue) {
39+
bool get = false;
40+
string ststr = "",endstr="",ans="";
41+
f(root,get,ststr,startValue);
42+
get = false;
43+
f(root,get,endstr,destValue);
44+
if(ststr==""){
45+
return endstr;
46+
}
47+
if(endstr==""){
48+
for(int i=0;i<ststr.size();i++){
49+
if(ststr[i]=='L' || ststr[i]=='R'){
50+
ststr[i]='U';
51+
}
52+
}
53+
return ststr;
54+
}
55+
if(ststr[0]==endstr[0]){
56+
string st,end;
57+
int i=1;
58+
while(i<min(ststr.size(),endstr.size())){
59+
if(ststr[i]==endstr[i]){
60+
i++;
61+
}
62+
else{
63+
break;
64+
}
65+
}
66+
if(i<min(ststr.size(),endstr.size())){
67+
int j = i,k=i;
68+
while(i<ststr.size()){
69+
ststr[i]='U';
70+
i++;
71+
}
72+
return ststr.substr(k,ststr.size()) + endstr.substr(j,endstr.size());
73+
}
74+
else{
75+
if(i==ststr.size()){
76+
return endstr.substr(i,endstr.size());
77+
}
78+
else{
79+
int j = i;
80+
while(i<ststr.size()){
81+
ststr[i] = 'U';
82+
i++;
83+
}
84+
return ststr.substr(j,ststr.size());
85+
}
86+
}
87+
}
88+
string temp;
89+
for(int i=0;i<ststr.size();i++){
90+
temp+='U';
91+
}
92+
temp+=endstr;
93+
return temp;
94+
}
95+
};

0 commit comments

Comments
 (0)