File tree Expand file tree Collapse file tree 6 files changed +348
-2
lines changed Expand file tree Collapse file tree 6 files changed +348
-2
lines changed Original file line number Diff line number Diff line change 4444<!-- 这里可写当前语言的特殊实现逻辑 -->
4545
4646``` 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
4869```
4970
5071### ** Java**
5172
5273<!-- 这里可写当前语言的特殊实现逻辑 -->
5374
5475``` 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+ ```
55145
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+ }
56174```
57175
58176### ** ...**
Original file line number Diff line number Diff line change 5959### ** Python3**
6060
6161``` 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
6384```
6485
6586### ** Java**
6687
6788``` 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+ ```
68158
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+ }
69187```
70188
71189### ** ...**
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