|
37 | 37 |
|
38 | 38 | <!-- 这里可写通用的实现逻辑 -->
|
39 | 39 |
|
| 40 | + |
| 41 | + |
40 | 42 | <!-- tabs:start -->
|
41 | 43 |
|
42 | 44 | ### **Python3**
|
@@ -143,6 +145,39 @@ public:
|
143 | 145 | };
|
144 | 146 | ```
|
145 | 147 |
|
| 148 | +```cpp |
| 149 | +/** |
| 150 | + * Definition for a binary tree node. |
| 151 | + * struct TreeNode { |
| 152 | + * int val; |
| 153 | + * TreeNode *left; |
| 154 | + * TreeNode *right; |
| 155 | + * TreeNode(int x) : val(x), left(NULL), right(NULL) {} |
| 156 | + * }; |
| 157 | + */ |
| 158 | +class Solution { |
| 159 | +public: |
| 160 | + TreeNode *inorderSuccessor(TreeNode *root, TreeNode *p) { |
| 161 | + stack<TreeNode *> stk; |
| 162 | + TreeNode *cur = root; |
| 163 | + while (cur != nullptr || !stk.empty()) { |
| 164 | + if (cur == nullptr) { |
| 165 | + cur = stk.top(); |
| 166 | + stk.pop(); |
| 167 | + if (cur->val > p->val) { |
| 168 | + return cur; |
| 169 | + } |
| 170 | + cur = cur->right; |
| 171 | + } else { |
| 172 | + stk.push(cur); |
| 173 | + cur = cur->left; |
| 174 | + } |
| 175 | + } |
| 176 | + return cur; |
| 177 | + } |
| 178 | +}; |
| 179 | +``` |
| 180 | + |
146 | 181 | ### **Go**
|
147 | 182 |
|
148 | 183 | ```go
|
@@ -173,6 +208,69 @@ func inorderSuccessor(root *TreeNode, p *TreeNode) *TreeNode {
|
173 | 208 | }
|
174 | 209 | ```
|
175 | 210 |
|
| 211 | +### **JavaScript** |
| 212 | + |
| 213 | +```js |
| 214 | +/** |
| 215 | + * Definition for a binary tree node. |
| 216 | + * function TreeNode(val) { |
| 217 | + * this.val = val; |
| 218 | + * this.left = this.right = null; |
| 219 | + * } |
| 220 | + */ |
| 221 | +/** |
| 222 | + * @param {TreeNode} root |
| 223 | + * @param {TreeNode} p |
| 224 | + * @return {TreeNode} |
| 225 | + */ |
| 226 | +var inorderSuccessor = function (root, p) { |
| 227 | + if (root == null) { |
| 228 | + return root |
| 229 | + } |
| 230 | + const { val, left, right } = root |
| 231 | + const res = inorderSuccessor(left, p) |
| 232 | + if (res != null) { |
| 233 | + return res |
| 234 | + } |
| 235 | + if (val > p.val) { |
| 236 | + return root |
| 237 | + } |
| 238 | + return inorderSuccessor(right, p) |
| 239 | +}; |
| 240 | +``` |
| 241 | + |
| 242 | +```js |
| 243 | +/** |
| 244 | + * Definition for a binary tree node. |
| 245 | + * function TreeNode(val) { |
| 246 | + * this.val = val; |
| 247 | + * this.left = this.right = null; |
| 248 | + * } |
| 249 | + */ |
| 250 | +/** |
| 251 | + * @param {TreeNode} root |
| 252 | + * @param {TreeNode} p |
| 253 | + * @return {TreeNode} |
| 254 | + */ |
| 255 | +var inorderSuccessor = function (root, p) { |
| 256 | + const stack = []; |
| 257 | + let cur = root; |
| 258 | + while (cur != null || stack.length !== 0) { |
| 259 | + if (cur == null) { |
| 260 | + cur = stack.pop(); |
| 261 | + if (cur.val > p.val) { |
| 262 | + return cur; |
| 263 | + } |
| 264 | + cur = cur.right; |
| 265 | + } else { |
| 266 | + stack.push(cur); |
| 267 | + cur = cur.left; |
| 268 | + } |
| 269 | + } |
| 270 | + return cur; |
| 271 | +}; |
| 272 | +``` |
| 273 | + |
176 | 274 | ### **...**
|
177 | 275 |
|
178 | 276 | ```
|
|
0 commit comments