翻转二叉树

226. 翻转二叉树

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

示例 1:

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

image-20220614101732879

示例 2:

image-20220614101745813

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

示例 3:

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

提示:

树中节点数目范围在 [0, 100] 内
-100 <= Node.val <= 100

解题思路

方法一

递归法

前序遍历和后序遍历都行,这里采用前序遍历

代码

1
2
3
4
5
6
7
8
9
10
11
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root==null) return root;
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
root.left = invertTree(root.left);
root.right = invertTree(root.right);
return root;
}
}

方法二

迭代法(层次遍历)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public TreeNode invertTree(TreeNode root) {
if (root == null) {return root;}
LinkedList<TreeNode> list = new LinkedList<>();
list.addLast(root);
while (!list.isEmpty()) {
int size = list.size();
for(int i = 0 ; i < size ;i++){
TreeNode node = list.removeFirst();
swap(node);
if (node.left != null) {list.addLast(node.left);}
if (node.right != null) {list.addLast(node.right);}
}
}
return root;
}

public void swap(TreeNode root){
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
}
}

翻转二叉树
http://example.com/2023/04/01/算法/二叉树/5. 翻转二叉树/
作者
PALE13
发布于
2023年4月1日
许可协议