LeetCode - Easy - 226. Invert Binary Tree

阳光穿透心脏的1/2处 2022-12-31 06:26 267阅读 0赞

Topic

  • Tree

Description

https://leetcode.com/problems/invert-binary-tree/

Invert a binary tree.

Example:

Input:

  1. 4
  2. / \
  3. 2 7
  4. / \ / \
  5. 1 3 6 9

Output:

  1. 4
  2. / \
  3. 7 2
  4. / \ / \
  5. 9 6 3 1

Trivia:
This problem was inspired by this original tweet by Max Howell:

Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so f*** off.

Analysis

方法一:递归(DFS)

方法二:迭代(DFS)

方法三:迭代(BFS)

Submission

  1. import java.util.LinkedList;
  2. import java.util.Queue;
  3. import com.lun.util.BinaryTree.TreeNode;
  4. public class InvertBinaryTree {
  5. // 方法一:递归(DFS)
  6. public TreeNode invertTree1(TreeNode root) {
  7. if (root == null)
  8. return null;
  9. TreeNode temp = invertTree1(root.left);
  10. root.left = invertTree1(root.right);
  11. root.right = temp;
  12. return root;
  13. }
  14. // 方法二:迭代(DFS)
  15. public TreeNode invertTree2(TreeNode root) {
  16. if (root == null)
  17. return null;
  18. LinkedList<TreeNode> stack = new LinkedList<>();
  19. stack.push(root);
  20. while (!stack.isEmpty()) {
  21. TreeNode node = stack.pop();
  22. TreeNode left = node.left;
  23. node.left = node.right;
  24. node.right = left;
  25. if (node.left != null)
  26. stack.push(node.left);
  27. if (node.right != null)
  28. stack.push(node.right);
  29. }
  30. return root;
  31. }
  32. // 方法三:迭代(BFS)
  33. public TreeNode invertTree3(TreeNode root) {
  34. if (root == null)
  35. return null;
  36. Queue<TreeNode> queue = new LinkedList<>();
  37. queue.offer(root);
  38. while (!queue.isEmpty()) {
  39. TreeNode node = queue.poll();
  40. TreeNode left = node.left;
  41. node.left = node.right;
  42. node.right = left;
  43. if (node.left != null)
  44. queue.offer(node.left);
  45. if (node.right != null)
  46. queue.offer(node.right);
  47. }
  48. return root;
  49. }
  50. }

Test

  1. import static org.junit.Assert.*;
  2. import org.junit.Test;
  3. import com.lun.util.BinaryTree;
  4. import com.lun.util.BinaryTree.TreeNode;
  5. public class InvertBinaryTreeTest {
  6. @Test
  7. public void test1() {
  8. InvertBinaryTree obj = new InvertBinaryTree();
  9. TreeNode root = makeATree();
  10. TreeNode expected = makeExpectedTree();
  11. assertTrue(BinaryTree.equals(obj.invertTree1(root), expected));
  12. }
  13. @Test
  14. public void test2() {
  15. InvertBinaryTree obj = new InvertBinaryTree();
  16. TreeNode root = makeATree();
  17. TreeNode expected = makeExpectedTree();
  18. assertTrue(BinaryTree.equals(obj.invertTree2(root), expected));
  19. }
  20. @Test
  21. public void test3() {
  22. InvertBinaryTree obj = new InvertBinaryTree();
  23. TreeNode root = makeATree();
  24. TreeNode expected = makeExpectedTree();
  25. assertTrue(BinaryTree.equals(obj.invertTree3(root), expected));
  26. }
  27. private TreeNode makeATree() {
  28. return new TreeNode(4,//
  29. new TreeNode(2,//
  30. new TreeNode(1),//
  31. new TreeNode(3)),//
  32. new TreeNode(7, //
  33. new TreeNode(6),//
  34. new TreeNode(9)));
  35. }
  36. private TreeNode makeExpectedTree() {
  37. return new TreeNode(4, //
  38. new TreeNode(7, //
  39. new TreeNode(9), //
  40. new TreeNode(6)), //
  41. new TreeNode(2, //
  42. new TreeNode(3), //
  43. new TreeNode(1)));
  44. }
  45. }

发表评论

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

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

相关阅读