Skip to content

Commit 0724c93

Browse files
authored
Create 2096.Step-By-Step-Directions-From-a-Binary-Tree-Node-to-Another.cpp
1 parent 544aca5 commit 0724c93

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
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+
string getDirections(TreeNode* root, int startValue, int destValue)
15+
{
16+
vector<int>nums1, nums2;
17+
nums1.push_back(root->val);
18+
nums2.push_back(root->val);
19+
string dirs1, dirs2;
20+
dfs(root, nums1, dirs1, startValue);
21+
dfs(root, nums2, dirs2, destValue);
22+
23+
int k = 0;
24+
while (k<nums1.size() && k<nums2.size() && nums1[k]==nums2[k])
25+
k++;
26+
k--;
27+
for (int i=k; i<dirs1.size(); i++) dirs1[i] = 'U';
28+
return dirs1.substr(k)+dirs2.substr(k);
29+
30+
}
31+
32+
bool dfs(TreeNode* node, vector<int>&nums, string&dirs, int target)
33+
{
34+
if (node==NULL) return false;
35+
if (node->val == target) return true;
36+
if (node->left)
37+
{
38+
nums.push_back(node->left->val);
39+
dirs.push_back('L');
40+
if (dfs(node->left, nums, dirs, target))
41+
return true;
42+
nums.pop_back();
43+
dirs.pop_back();
44+
}
45+
if (node->right)
46+
{
47+
nums.push_back(node->right->val);
48+
dirs.push_back('R');
49+
if (dfs(node->right, nums, dirs, target))
50+
return true;
51+
nums.pop_back();
52+
dirs.pop_back();
53+
}
54+
return false;
55+
}
56+
57+
};

0 commit comments

Comments
 (0)