diff --git "a/problems/kamacoder/0054.\346\233\277\346\215\242\346\225\260\345\255\227.md" "b/problems/kamacoder/0054.\346\233\277\346\215\242\346\225\260\345\255\227.md" index 6679f68bb6..6489c41803 100644 --- "a/problems/kamacoder/0054.\346\233\277\346\215\242\346\225\260\345\255\227.md" +++ "b/problems/kamacoder/0054.\346\233\277\346\215\242\346\225\260\345\255\227.md" @@ -189,7 +189,7 @@ public class Main { String s = sc.next(); int len = s.length(); for (int i = 0; i < s.length(); i++) { - if (s.charAt(i) >= 0 && s.charAt(i) <= '9') { + if (s.charAt(i) >= '0' && s.charAt(i) <= '9') { len += 5; } } diff --git "a/problems/\344\272\214\345\217\211\346\240\221\347\232\204\347\273\237\344\270\200\350\277\255\344\273\243\346\263\225.md" "b/problems/\344\272\214\345\217\211\346\240\221\347\232\204\347\273\237\344\270\200\350\277\255\344\273\243\346\263\225.md" index 803b25ae80..305a11aaac 100755 --- "a/problems/\344\272\214\345\217\211\346\240\221\347\232\204\347\273\237\344\270\200\350\277\255\344\273\243\346\263\225.md" +++ "b/problems/\344\272\214\345\217\211\346\240\221\347\232\204\347\273\237\344\270\200\350\277\255\344\273\243\346\263\225.md" @@ -225,7 +225,7 @@ public: ## 其他语言版本 ### Java: -迭代法前序遍历代码如下: +迭代法前序遍历(空指针标记法)代码如下: ```java class Solution { @@ -254,7 +254,42 @@ class Solution { } ``` -迭代法中序遍历代码如下: +迭代法前序遍历(boolean标记法)代码如下: + +```java +class Solution { + public List preorderTraversal(TreeNode root) { + List res = new LinkedList<>(); + if (root == null) { + return res; + } + Stack stack = new Stack<>(); + stack.push(new Object[]{root, false}); + + while (!stack.empty()) { + TreeNode node = (TreeNode) stack.peek()[0]; + Boolean visited = (Boolean) stack.peek()[1]; + stack.pop(); + + if (visited) { + res.add(node.val); + } else { // 先序遍历:中左右,入栈顺序相反 + if (node.right != null) { + stack.push(new Object[]{node.right, false}); + } + if (node.left != null) { + stack.push(new Object[]{node.left, false}); + } + stack.push(new Object[]{node, true}); + } + } + return res; + } +} +``` + +迭代法中序遍历(空指针标记法)代码如下: + ```java class Solution { public List inorderTraversal(TreeNode root) { @@ -281,7 +316,41 @@ public List inorderTraversal(TreeNode root) { } ``` -迭代法后序遍历代码如下: +迭代法中序遍历(boolean标记法)代码如下: + +```java +class Solution { + public List inorderTraversal(TreeNode root) { + List res = new LinkedList<>(); + if (root == null) { + return res; + } + Stack stack = new Stack<>(); + stack.push(new Object[]{root, false}); + while (!stack.empty()) { + TreeNode node = (TreeNode) stack.peek()[0]; + Boolean visited = (Boolean) stack.peek()[1]; + stack.pop(); + + if (visited) { + res.add(node.val); + } else { // 中序遍历:左中右,入栈顺序相反 + if (node.right != null) { + stack.push(new Object[]{node.right, false}); + } + stack.push(new Object[]{node, true}); + if (node.left != null) { + stack.push(new Object[]{node.left, false}); + } + } + } + return res; + } +} +``` + +迭代法后序遍历(空指针标记法)代码如下: + ```java class Solution { public List postorderTraversal(TreeNode root) { @@ -309,6 +378,40 @@ class Solution { } ``` +迭代法后序遍历(boolean标记法)代码如下: + +```java +class Solution { + public List postorderTraversal(TreeNode root) { + List res = new LinkedList<>(); + if (root == null) { + return res; + } + Stack stack = new Stack<>(); + stack.push(new Object[]{root, false}); + + while (!stack.empty()) { + TreeNode node = (TreeNode) stack.peek()[0]; + Boolean visited = (Boolean) stack.peek()[1]; + stack.pop(); + + if (visited) { + res.add(node.val); + } else { // 后序遍历:左右中,入栈顺序相反 + stack.push(new Object[]{node, true}); + if (node.right != null) { + stack.push(new Object[]{node.right, false}); + } + if (node.left != null) { + stack.push(new Object[]{node.left, false}); + } + } + } + return res; + } +} +``` + ### Python: > 迭代法前序遍历(空指针标记法):