26.翻转二叉树(重要)

226. 翻转二叉树

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

 

示例 1:

输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]

示例 2:

输入:root = [2,1,3]
输出:[2,3,1]

示例 3:

输入:root = []
输出:[]

 

提示:

  • 树中节点数目范围在 [0, 100]
  • -100 <= Node.val <= 100
 1 利用前序遍历
 2 class Solution {
 3         // 先序遍历--从顶向下交换
 4         public TreeNode invertTree(TreeNode root) {
 5             if (root == null) return null;
 6             // 保存右子树
 7             TreeNode rightTree = root.right;
 8             // 交换左右子树的位置
 9             root.right = invertTree(root.left);
10             root.left = invertTree(rightTree);
11             return root;
12         }
13     }
14 
15 利用中序遍历
16 class Solution {
17     public TreeNode invertTree(TreeNode root) {
18             if (root == null) return null;
19             invertTree(root.left); // 递归找到左节点
20             TreeNode rightNode= root.right; // 保存右节点
21             root.right = root.left;
22             root.left = rightNode;
23             // 递归找到右节点 继续交换 : 因为此时左右节点已经交换了,所以此时的右节点为root.left
24             invertTree(root.left); 
25     }
26 }
27 
28 利用后序遍历
29  class Solution {
30         public TreeNode invertTree(TreeNode root) {
31             // 后序遍历-- 从下向上交换
32             if (root == null) return null;
33             TreeNode leftNode = invertTree(root.left);
34             TreeNode rightNode = invertTree(root.right);
35             root.right = leftNode;
36             root.left = rightNode;
37             return root;
38         }
39     }
40 
41 利用层次遍历
42    class Solution {
43         public TreeNode invertTree(TreeNode root) {
44             // 层次遍历--直接左右交换即可
45             if (root == null) return null;
46             Queue<TreeNode> queue = new LinkedList<>();
47             queue.offer(root);
48             while (!queue.isEmpty()){
49                 TreeNode node = queue.poll();
50                 TreeNode rightTree = node.right;
51                 node.right = node.left;
52                 node.left = rightTree;
53                 if (node.left != null){
54                     queue.offer(node.left);
55                 }
56                 if (node.right != null){
57                     queue.offer(node.right);
58                 }
59             }
60             return root;
61         }
62     }

 

posted on 2022-06-27 11:09  HHHuskie  阅读(24)  评论(0编辑  收藏  举报

导航