• 一文详解反转二叉树


    1 前言 

    LeetCode连接

    根据二叉树的根节点root,反转这棵二叉树,并返回其根节点。

     

     2 思路

    总体思想是采用层序遍历Java 一文详解二叉树的层序遍历

    【第一步】交换root的左右子节点

     【第二步】交换节点7的左右子节点

     【第三步】交换节点2的左右子节点

    1. package cn.msf.tree;
    2. import javax.xml.namespace.QName;
    3. import java.util.ArrayDeque;
    4. import java.util.ArrayList;
    5. import java.util.Deque;
    6. import java.util.List;
    7. import static cn.msf.tree.LevelTraversal.levelPrint;
    8. /**
    9. * @author : msf
    10. * @date : 2022/12/6
    11. */
    12. public class InvertTree {
    13. public static void main(String[] args) {
    14. TreeNode root = new TreeNode(1);
    15. TreeNode node1 = new TreeNode(2);
    16. TreeNode node2 = new TreeNode(3);
    17. TreeNode node3 = new TreeNode(4);
    18. TreeNode node4 = new TreeNode(5);
    19. TreeNode node5 = new TreeNode(6);
    20. TreeNode node6 = new TreeNode(7);
    21. root.left = node1;
    22. root.right = node2;
    23. node1.left = node3;
    24. node1.right = node4;
    25. node2.left = node5;
    26. node2.right = node6;
    27. System.out.println("反转前 二叉树的层序遍历结果");
    28. List> arrayLists = levelPrint(root);
    29. for (ArrayList arrayList : arrayLists) {
    30. System.out.println(arrayList);
    31. }
    32. InvertTree tree = new InvertTree();
    33. root = tree.invertTree(root);
    34. System.out.println("反转后 二叉树的层序遍历结果");
    35. arrayLists = levelPrint(root);
    36. for (ArrayList arrayList : arrayLists) {
    37. System.out.println(arrayList);
    38. }
    39. }
    40. public TreeNode invertTree(TreeNode root) {
    41. if (root == null) {
    42. return null;
    43. }
    44. Deque queue = new ArrayDeque<>();
    45. queue.addLast(root);
    46. while (!queue.isEmpty()) {
    47. int size = queue.size();
    48. for (int i = 0; i < size; i++) {
    49. TreeNode node = queue.removeFirst();
    50. if (node.left != null) {
    51. queue.addLast(node.left);
    52. }
    53. if (node.right != null) {
    54. queue.addLast(node.right);
    55. }
    56. if(node.left != null || node.right !=null) {
    57. TreeNode temp = node.left;
    58. node.left = node.right;
    59. node.right = temp;
    60. }
    61. }
    62. }
    63. return root;
    64. }
    65. }

    上述代码执行结果:

     

  • 相关阅读:
    ES6中的一些新特性,一篇就够了
    Jenkins学习笔记3
    Kafka(四) Consumer消费者
    Java 根据Map的值对 List<Map<String, Object>> 进行排序
    为什么自研官网系统,比以往面对更大挑战?
    LCR 146.螺旋遍历数组
    使用Egg调用mysql实现增删改查接口操作
    matlab检索相似图像
    word2vec+回归模型实现分类任务
    Android原生实现控件Ripple方案(API28及以上)
  • 原文地址:https://blog.csdn.net/abc123mma/article/details/128200145