2
2
3
3
import com .fishercoder .common .classes .TreeNode ;
4
4
5
- import java .util .ArrayList ;
6
- import java .util .List ;
7
- import java .util .Stack ;
5
+ import java .util .*;
8
6
9
- /**Given a binary tree, return the preorder traversal of its nodes' values.
7
+ /**
8
+ * 144. Binary Tree Preorder Traversal
9
+ * Given a binary tree, return the preorder traversal of its nodes' values.
10
10
11
11
For example:
12
12
Given binary tree {1,#,2,3},
20
20
Note: Recursive solution is trivial, could you do it iteratively?*/
21
21
22
22
public class _144 {
23
- public List <Integer > preorderTraversal_iterative_original (TreeNode root ) {
23
+
24
+ public List <Integer > preorderTraversal_iterative (TreeNode root ) {
24
25
List <Integer > list = new ArrayList ();
25
- Stack <TreeNode > stack = new Stack ();
26
26
if (root == null ) return list ;
27
+ Deque <TreeNode > stack = new ArrayDeque <>();
27
28
stack .push (root );
28
29
while (!stack .isEmpty ()){
29
30
TreeNode curr = stack .pop ();
30
31
list .add (curr .val );
32
+ /**We push right nodes onto the stack first, since they'll be popped out later than
33
+ * the left nodes, to meet the preorder: root -> left -> right. */
31
34
if (curr .right != null ) stack .push (curr .right );
32
35
if (curr .left != null ) stack .push (curr .left );
33
36
}
34
37
return list ;
35
38
}
36
39
37
- public List <Integer > preorderTraversal_recursive_1 (TreeNode root ) {
40
+ public List <Integer > preorderTraversal_recursive (TreeNode root ) {
38
41
List <Integer > list = new ArrayList ();
39
42
return pre (root , list );
40
43
}
@@ -47,18 +50,4 @@ List<Integer> pre(TreeNode root, List<Integer> list){
47
50
return list ;
48
51
}
49
52
50
-
51
- public List <Integer > preorderTraversal_recursive_2 (TreeNode root ) {
52
- List <Integer > result = new ArrayList ();
53
- if (root != null ) dfs (root , result );
54
- return result ;
55
- }
56
-
57
- private void dfs (TreeNode root , List <Integer > result ){
58
- result .add (root .val );
59
- if (root .left != null ) dfs (root .left , result );
60
- if (root .right != null ) dfs (root .right , result );
61
- }
62
-
63
-
64
53
}
0 commit comments