LeetCode - Easy - 94. Binary Tree Inorder Traversal

Bertha 。 2022-10-06 02:54 208阅读 0赞

Topic

  • Hash Table
  • Stack
  • Tree

Description

https://leetcode.com/problems/binary-tree-inorder-traversal/

Given the root of a binary tree, return the inorder traversal of its nodes’ values.

Example 1:
93c03b302d4108b3debe3c473af634ea.png

  1. Input: root = [1,null,2,3]
  2. Output: [1,3,2]

Example 2:

  1. Input: root = []
  2. Output: []

Example 3:

  1. Input: root = [1]
  2. Output: [1]

Example 4:
428ab6a3e4c104cf4b41ad1a1a0a6f24.png

  1. Input: root = [1,2]
  2. Output: [2,1]

Example 5:

67437fd84487294f797443df319c90e9.png

  1. Input: root = [1,null,2]
  2. Output: [1,2]

Constraints:

  • The number of nodes in the tree is in the range [0, 100].
  • -100 <= Node.val <= 100

Follow up: Recursive solution is trivial, could you do it iteratively?

Analysis

方法一:递归法

方法二:迭代法

Submission

  1. import java.util.ArrayList;
  2. import java.util.LinkedList;
  3. import java.util.List;
  4. import com.lun.util.BinaryTree.TreeNode;
  5. public class BinaryTreeInorderTraversal {
  6. //方法一:递归法
  7. public List<Integer> inorderTraversal(TreeNode root) {
  8. List<Integer> result = new ArrayList<>();
  9. inorderTraversal(root, result);
  10. return result;
  11. }
  12. private void inorderTraversal(TreeNode node, List<Integer> result) {
  13. if(node == null) return;
  14. inorderTraversal(node.left, result);
  15. result.add(node.val);
  16. inorderTraversal(node.right, result);
  17. }
  18. //方法二:迭代法
  19. public List<Integer> inorderTraversal2(TreeNode root) {
  20. List<Integer> result = new ArrayList<>();
  21. if(root == null) return result;
  22. LinkedList<TreeNode> stack = new LinkedList<>();
  23. TreeNode p = root;
  24. while(!stack.isEmpty() || p != null) {
  25. if(p != null) {
  26. stack.push(p);
  27. p = p.left;
  28. }else {
  29. TreeNode node = stack.pop();
  30. result.add(node.val);
  31. p = node.right;
  32. }
  33. }
  34. return result;
  35. }
  36. }

Test

  1. import static org.junit.Assert.*;
  2. import org.hamcrest.collection.IsEmptyCollection;
  3. import org.hamcrest.collection.IsIterableContainingInOrder;
  4. import org.junit.Test;
  5. import com.lun.util.BinaryTree;
  6. public class BinaryTreeInorderTraversalTest {
  7. @Test
  8. public void test() {
  9. BinaryTreeInorderTraversal obj = new BinaryTreeInorderTraversal();
  10. assertThat(obj.inorderTraversal(BinaryTree.integers2BinaryTree(1,null,2,3)),//
  11. IsIterableContainingInOrder.contains(1,3,2));
  12. assertThat(obj.inorderTraversal(null),//
  13. IsEmptyCollection.empty());
  14. assertThat(obj.inorderTraversal(BinaryTree.integers2BinaryTree(1)),//
  15. IsIterableContainingInOrder.contains(1));
  16. assertThat(obj.inorderTraversal(BinaryTree.integers2BinaryTree(1, 2)),//
  17. IsIterableContainingInOrder.contains(2, 1));
  18. assertThat(obj.inorderTraversal(BinaryTree.integers2BinaryTree(1, null, 2)),//
  19. IsIterableContainingInOrder.contains(1, 2));
  20. }
  21. @Test
  22. public void test2() {
  23. BinaryTreeInorderTraversal obj = new BinaryTreeInorderTraversal();
  24. assertThat(obj.inorderTraversal2(BinaryTree.integers2BinaryTree(1,null,2,3)),//
  25. IsIterableContainingInOrder.contains(1,3,2));
  26. assertThat(obj.inorderTraversal2(null),//
  27. IsEmptyCollection.empty());
  28. assertThat(obj.inorderTraversal2(BinaryTree.integers2BinaryTree(1)),//
  29. IsIterableContainingInOrder.contains(1));
  30. assertThat(obj.inorderTraversal2(BinaryTree.integers2BinaryTree(1, 2)),//
  31. IsIterableContainingInOrder.contains(2, 1));
  32. assertThat(obj.inorderTraversal2(BinaryTree.integers2BinaryTree(1, null, 2)),//
  33. IsIterableContainingInOrder.contains(1, 2));
  34. }
  35. }

发表评论

表情:
评论列表 (有 0 条评论,208人围观)

还没有评论,来说两句吧...

相关阅读