File tree 6 files changed +348
-2
lines changed
6 files changed +348
-2
lines changed Original file line number Diff line number Diff line change 44
44
<!-- 这里可写当前语言的特殊实现逻辑 -->
45
45
46
46
``` python
47
-
47
+ # Definition for a binary tree node.
48
+ # class TreeNode:
49
+ # def __init__(self, x):
50
+ # self.val = x
51
+ # self.left = None
52
+ # self.right = None
53
+
54
+ class Solution :
55
+ def inorderSuccessor (self , root : TreeNode, p : TreeNode) -> TreeNode:
56
+ def dfs (root ):
57
+ if root is None :
58
+ return
59
+ dfs(root.left)
60
+ nonlocal ans, prev
61
+ if prev == p:
62
+ ans = root
63
+ prev = root
64
+ dfs(root.right)
65
+
66
+ ans = prev = None
67
+ dfs(root)
68
+ return ans
48
69
```
49
70
50
71
### ** Java**
51
72
52
73
<!-- 这里可写当前语言的特殊实现逻辑 -->
53
74
54
75
``` java
76
+ /**
77
+ * Definition for a binary tree node.
78
+ * public class TreeNode {
79
+ * int val;
80
+ * TreeNode left;
81
+ * TreeNode right;
82
+ * TreeNode(int x) { val = x; }
83
+ * }
84
+ */
85
+ class Solution {
86
+ private TreeNode prev;
87
+ private TreeNode p;
88
+ private TreeNode ans;
89
+
90
+ public TreeNode inorderSuccessor (TreeNode root , TreeNode p ) {
91
+ prev = null ;
92
+ ans = null ;
93
+ this . p = p;
94
+ dfs(root);
95
+ return ans;
96
+ }
97
+
98
+ private void dfs (TreeNode root ) {
99
+ if (root == null ) {
100
+ return ;
101
+ }
102
+ dfs(root. left);
103
+ if (prev == p) {
104
+ ans = root;
105
+ }
106
+ prev = root;
107
+ dfs(root. right);
108
+ }
109
+ }
110
+ ```
111
+
112
+ ### ** C++**
113
+
114
+ ``` cpp
115
+ /* *
116
+ * Definition for a binary tree node.
117
+ * struct TreeNode {
118
+ * int val;
119
+ * TreeNode *left;
120
+ * TreeNode *right;
121
+ * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
122
+ * };
123
+ */
124
+ class Solution {
125
+ public:
126
+ TreeNode* prev;
127
+ TreeNode* p;
128
+ TreeNode* ans;
129
+
130
+ TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) {
131
+ this->p = p;
132
+ dfs(root);
133
+ return ans;
134
+ }
135
+
136
+ void dfs (TreeNode* root) {
137
+ if (!root) return;
138
+ dfs(root->left);
139
+ if (prev == p) ans = root;
140
+ prev = root;
141
+ dfs(root->right);
142
+ }
143
+ };
144
+ ```
55
145
146
+ ### **Go**
147
+
148
+ ```go
149
+ /**
150
+ * Definition for a binary tree node.
151
+ * type TreeNode struct {
152
+ * Val int
153
+ * Left *TreeNode
154
+ * Right *TreeNode
155
+ * }
156
+ */
157
+ func inorderSuccessor(root *TreeNode, p *TreeNode) *TreeNode {
158
+ var prev, ans *TreeNode
159
+ var dfs func(root *TreeNode)
160
+ dfs = func(root *TreeNode) {
161
+ if root == nil {
162
+ return
163
+ }
164
+ dfs(root.Left)
165
+ if prev == p {
166
+ ans = root
167
+ }
168
+ prev = root
169
+ dfs(root.Right)
170
+ }
171
+ dfs(root)
172
+ return ans
173
+ }
56
174
```
57
175
58
176
### ** ...**
Original file line number Diff line number Diff line change 59
59
### ** Python3**
60
60
61
61
``` python
62
-
62
+ # Definition for a binary tree node.
63
+ # class TreeNode:
64
+ # def __init__(self, x):
65
+ # self.val = x
66
+ # self.left = None
67
+ # self.right = None
68
+
69
+ class Solution :
70
+ def inorderSuccessor (self , root : TreeNode, p : TreeNode) -> TreeNode:
71
+ def dfs (root ):
72
+ if root is None :
73
+ return
74
+ dfs(root.left)
75
+ nonlocal ans, prev
76
+ if prev == p:
77
+ ans = root
78
+ prev = root
79
+ dfs(root.right)
80
+
81
+ ans = prev = None
82
+ dfs(root)
83
+ return ans
63
84
```
64
85
65
86
### ** Java**
66
87
67
88
``` java
89
+ /**
90
+ * Definition for a binary tree node.
91
+ * public class TreeNode {
92
+ * int val;
93
+ * TreeNode left;
94
+ * TreeNode right;
95
+ * TreeNode(int x) { val = x; }
96
+ * }
97
+ */
98
+ class Solution {
99
+ private TreeNode prev;
100
+ private TreeNode p;
101
+ private TreeNode ans;
102
+
103
+ public TreeNode inorderSuccessor (TreeNode root , TreeNode p ) {
104
+ prev = null ;
105
+ ans = null ;
106
+ this . p = p;
107
+ dfs(root);
108
+ return ans;
109
+ }
110
+
111
+ private void dfs (TreeNode root ) {
112
+ if (root == null ) {
113
+ return ;
114
+ }
115
+ dfs(root. left);
116
+ if (prev == p) {
117
+ ans = root;
118
+ }
119
+ prev = root;
120
+ dfs(root. right);
121
+ }
122
+ }
123
+ ```
124
+
125
+ ### ** C++**
126
+
127
+ ``` cpp
128
+ /* *
129
+ * Definition for a binary tree node.
130
+ * struct TreeNode {
131
+ * int val;
132
+ * TreeNode *left;
133
+ * TreeNode *right;
134
+ * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
135
+ * };
136
+ */
137
+ class Solution {
138
+ public:
139
+ TreeNode* prev;
140
+ TreeNode* p;
141
+ TreeNode* ans;
142
+
143
+ TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) {
144
+ this->p = p;
145
+ dfs(root);
146
+ return ans;
147
+ }
148
+
149
+ void dfs (TreeNode* root) {
150
+ if (!root) return;
151
+ dfs(root->left);
152
+ if (prev == p) ans = root;
153
+ prev = root;
154
+ dfs(root->right);
155
+ }
156
+ };
157
+ ```
68
158
159
+ ### **Go**
160
+
161
+ ```go
162
+ /**
163
+ * Definition for a binary tree node.
164
+ * type TreeNode struct {
165
+ * Val int
166
+ * Left *TreeNode
167
+ * Right *TreeNode
168
+ * }
169
+ */
170
+ func inorderSuccessor(root *TreeNode, p *TreeNode) *TreeNode {
171
+ var prev, ans *TreeNode
172
+ var dfs func(root *TreeNode)
173
+ dfs = func(root *TreeNode) {
174
+ if root == nil {
175
+ return
176
+ }
177
+ dfs(root.Left)
178
+ if prev == p {
179
+ ans = root
180
+ }
181
+ prev = root
182
+ dfs(root.Right)
183
+ }
184
+ dfs(root)
185
+ return ans
186
+ }
69
187
```
70
188
71
189
### ** ...**
Original file line number Diff line number Diff line change
1
+ /* *
2
+ * Definition for a binary tree node.
3
+ * struct TreeNode {
4
+ * int val;
5
+ * TreeNode *left;
6
+ * TreeNode *right;
7
+ * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8
+ * };
9
+ */
10
+ class Solution {
11
+ public:
12
+ TreeNode* prev;
13
+ TreeNode* p;
14
+ TreeNode* ans;
15
+
16
+ TreeNode* inorderSuccessor (TreeNode* root, TreeNode* p) {
17
+ this ->p = p;
18
+ dfs (root);
19
+ return ans;
20
+ }
21
+
22
+ void dfs (TreeNode* root) {
23
+ if (!root) return ;
24
+ dfs (root->left );
25
+ if (prev == p) ans = root;
26
+ prev = root;
27
+ dfs (root->right );
28
+ }
29
+ };
Original file line number Diff line number Diff line change
1
+ /**
2
+ * Definition for a binary tree node.
3
+ * type TreeNode struct {
4
+ * Val int
5
+ * Left *TreeNode
6
+ * Right *TreeNode
7
+ * }
8
+ */
9
+ func inorderSuccessor (root * TreeNode , p * TreeNode ) * TreeNode {
10
+ var prev , ans * TreeNode
11
+ var dfs func (root * TreeNode )
12
+ dfs = func (root * TreeNode ) {
13
+ if root == nil {
14
+ return
15
+ }
16
+ dfs (root .Left )
17
+ if prev == p {
18
+ ans = root
19
+ }
20
+ prev = root
21
+ dfs (root .Right )
22
+ }
23
+ dfs (root )
24
+ return ans
25
+ }
Original file line number Diff line number Diff line change
1
+ /**
2
+ * Definition for a binary tree node.
3
+ * public class TreeNode {
4
+ * int val;
5
+ * TreeNode left;
6
+ * TreeNode right;
7
+ * TreeNode(int x) { val = x; }
8
+ * }
9
+ */
10
+ class Solution {
11
+ private TreeNode prev ;
12
+ private TreeNode p ;
13
+ private TreeNode ans ;
14
+
15
+ public TreeNode inorderSuccessor (TreeNode root , TreeNode p ) {
16
+ prev = null ;
17
+ ans = null ;
18
+ this .p = p ;
19
+ dfs (root );
20
+ return ans ;
21
+ }
22
+
23
+ private void dfs (TreeNode root ) {
24
+ if (root == null ) {
25
+ return ;
26
+ }
27
+ dfs (root .left );
28
+ if (prev == p ) {
29
+ ans = root ;
30
+ }
31
+ prev = root ;
32
+ dfs (root .right );
33
+ }
34
+ }
Original file line number Diff line number Diff line change
1
+ # Definition for a binary tree node.
2
+ # class TreeNode:
3
+ # def __init__(self, x):
4
+ # self.val = x
5
+ # self.left = None
6
+ # self.right = None
7
+
8
+ class Solution :
9
+ def inorderSuccessor (self , root : TreeNode , p : TreeNode ) -> TreeNode :
10
+ def dfs (root ):
11
+ if root is None :
12
+ return
13
+ dfs (root .left )
14
+ nonlocal ans , prev
15
+ if prev == p :
16
+ ans = root
17
+ prev = root
18
+ dfs (root .right )
19
+
20
+ ans = prev = None
21
+ dfs (root )
22
+ return ans
You can’t perform that action at this time.
0 commit comments