File tree Expand file tree Collapse file tree 2 files changed +103
-0
lines changed Expand file tree Collapse file tree 2 files changed +103
-0
lines changed Original file line number Diff line number Diff line change
1
+ package tree ;
2
+
3
+ import java .util .ArrayList ;
4
+ import java .util .List ;
5
+ import java .util .Stack ;
6
+
7
+ /**
8
+ * @author alis
9
+ * @date 2019/10/27 12:55 AM
10
+ * @description
11
+ */
12
+ public class LC_144_PreOrderTraversal {
13
+
14
+
15
+ /**
16
+ * 二叉树前序遍历:根 左 右
17
+ * 递归
18
+ */
19
+ public List <Integer > preOrderTraversalRecur (tree .TreeNode root ) {
20
+ List <Integer > nums = new ArrayList <>();
21
+ // terminator
22
+ if (null == root ) return nums ;
23
+
24
+ // process
25
+ nums .add (root .val );
26
+
27
+ // drill down
28
+ if (root .left != null ) nums .addAll (preOrderTraversalRecur (root .left ));
29
+ if (root .right != null ) nums .addAll (preOrderTraversalRecur (root .right ));
30
+
31
+ // reverse states
32
+
33
+ return nums ;
34
+ }
35
+
36
+ /**
37
+ * 栈迭代 前序遍历二叉树
38
+ * 核心思想:先将根结点入栈,在while循环中取出,如果子结点不为空,先入栈右结点,再入栈左结点,
39
+ * 继续while循环,输出根结点的值
40
+ */
41
+ public List <Integer > preOrderTraversalStack (TreeNode root ) {
42
+ List <Integer > nums = new ArrayList <>();
43
+ if (null == root ) return nums ;
44
+ Stack <TreeNode > stack = new Stack <>();
45
+ stack .add (root );
46
+ while (!stack .isEmpty ()) {
47
+ TreeNode node = stack .pop ();
48
+ nums .add (node .val );
49
+ if (node .right != null ) {
50
+ stack .push (node .right );
51
+ }
52
+ if (node .left != null ) {
53
+ stack .push (node .left );
54
+ }
55
+ }
56
+ return nums ;
57
+ }
58
+ }
Original file line number Diff line number Diff line change
1
+ package tree ;
2
+
3
+ import org .junit .Test ;
4
+
5
+ import java .util .Arrays ;
6
+ import java .util .List ;
7
+
8
+ import static org .hamcrest .Matchers .is ;
9
+ import static org .junit .Assert .assertThat ;
10
+
11
+ /**
12
+ * @author alis
13
+ * @date 2019/10/27 12:53 AM
14
+ * @description
15
+ */
16
+ public class LC_144_PreOrderTraversalTest {
17
+
18
+ private LC_144_PreOrderTraversal preOrderTraversal = new LC_144_PreOrderTraversal ();
19
+
20
+ @ Test
21
+ public void preOrderTraversalTest () {
22
+ TreeNode root = new TreeNode (1 );
23
+ TreeNode node2 = new TreeNode (2 );
24
+ TreeNode node3 = new TreeNode (3 );
25
+ node2 .left = node3 ;
26
+ root .right = node2 ;
27
+ List <Integer > expected = Arrays .asList (1 , 2 , 3 );
28
+ List <Integer > res = preOrderTraversal .preOrderTraversalRecur (root );
29
+ assertThat (res , is (expected ));
30
+ }
31
+
32
+ @ Test
33
+ public void preOrderTraversalStackTest () {
34
+ TreeNode root = new TreeNode (1 );
35
+ TreeNode node2 = new TreeNode (2 );
36
+ TreeNode node3 = new TreeNode (3 );
37
+ node2 .left = node3 ;
38
+ root .right = node2 ;
39
+ List <Integer > expected = Arrays .asList (1 , 2 , 3 );
40
+ List <Integer > res = preOrderTraversal .preOrderTraversalStack (root );
41
+ assertThat (res , is (expected ));
42
+ }
43
+
44
+
45
+ }
You can’t perform that action at this time.
0 commit comments