Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit f419f39

Browse files
committed
#145 后序遍历
1 parent e28426f commit f419f39

File tree

2 files changed

+92
-0
lines changed

2 files changed

+92
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package tree;
2+
3+
import java.util.ArrayList;
4+
import java.util.LinkedList;
5+
import java.util.List;
6+
import java.util.Stack;
7+
8+
/**
9+
* 后序遍历:左右根
10+
*
11+
* @author liangqian0723@gmail.com
12+
* @since 2020/3/6 12:42 AM
13+
*/
14+
public class LC_145_BinaryTreePostOrderTraversal {
15+
public List<Integer> postOrderTraversal_recur(TreeNode root) {
16+
List<Integer> result = new ArrayList<>();
17+
if (root == null) {
18+
return result;
19+
}
20+
if (root.left != null) {
21+
result.addAll(postOrderTraversal_recur(root.left));
22+
}
23+
if (root.right != null) {
24+
result.addAll(postOrderTraversal_recur(root.right));
25+
}
26+
result.add(root.val);
27+
return result;
28+
}
29+
30+
/**
31+
* 逆序输出到链表结构中: 比如一个根节点、左节点、右节点;先将根节点放在链表头部,再将右节点放在链表头部,最后将左节点放在链表头部;最终顺序就是 左 右 根 (后序遍历)
32+
*/
33+
public List<Integer> postOrderTraversal_loop(TreeNode head) {
34+
LinkedList<Integer> result = new LinkedList<>();
35+
if (null == head) return result;
36+
Stack<TreeNode> stack = new Stack<>();
37+
stack.add(head);
38+
TreeNode lastNode = head;
39+
while (!stack.isEmpty()) {
40+
TreeNode cur = stack.pop();
41+
result.addFirst(cur.val); //
42+
if (cur.left != null) {
43+
stack.add(cur.left);
44+
}
45+
if (cur.right != null) {
46+
stack.add(cur.right);
47+
}
48+
}
49+
return result;
50+
}
51+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
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.core.Is.is;
9+
import static org.junit.Assert.assertThat;
10+
11+
/**
12+
* @author liangqian0723@gmail.com
13+
* @since 2020/3/6 12:38 AM
14+
*/
15+
public class LC_145_BinaryTreePostOrderTraversalTest {
16+
@Test
17+
public void test_postorderTraversal_recur() {
18+
TreeNode root = new TreeNode(1);
19+
TreeNode node2 = new TreeNode(2);
20+
TreeNode node3 = new TreeNode(3);
21+
root.right = node2;
22+
node2.left = node3;
23+
LC_145_BinaryTreePostOrderTraversal binaryTreePostOrderTraversal = new LC_145_BinaryTreePostOrderTraversal();
24+
List<Integer> result = binaryTreePostOrderTraversal.postOrderTraversal_recur(root);
25+
List<Integer> expected = Arrays.asList(3, 2, 1);
26+
assertThat(result, is(expected));
27+
}
28+
29+
@Test
30+
public void test_postorderTraversal_loop() {
31+
TreeNode root = new TreeNode(1);
32+
TreeNode node2 = new TreeNode(2);
33+
TreeNode node3 = new TreeNode(3);
34+
root.right = node2;
35+
node2.left = node3;
36+
LC_145_BinaryTreePostOrderTraversal binaryTreePostOrderTraversal = new LC_145_BinaryTreePostOrderTraversal();
37+
List<Integer> result = binaryTreePostOrderTraversal.postOrderTraversal_loop(root);
38+
List<Integer> expected = Arrays.asList(3, 2, 1);
39+
assertThat(result, is(expected));
40+
}
41+
}

0 commit comments

Comments
 (0)