题目
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
思路
从根节点开始,递归地对树进行遍历,并从叶子节点先开始翻转。
如果当前遍历到的节点 root
的左右两棵子树都已经翻转,那么只需要交换两棵子树的位置,即可完成以 root
为根节点的整棵子树的翻转
java代码如下:
//DFS 递归
class Solution{
public TreeNode invertTree(TreeNode root){
if(root == null){
return null;
}
TreeNode left = invertTree(root.left);//翻转后的左子树
TreeNode right = invertTree(root.right);//翻转后的右子树
//进行翻转
root.left = right;
root.right = left;
return root;
}
}
//BFS 队列 层序遍历 出队的时候交换节点
class Solution {
public TreeNode invertTree(TreeNode root){
if(root == null){
return null;
}
ArrayDeque<TreeNode> deque = new ArrayDeque<>();
deque.offer(root);//添加根节点
while(! deque.isEmpty()){
int size = deque.size();//记录当前层节点个数
while(size-- > 0){
TreeNode node = deque.poll();//出队列,用node存储
swap(node);//出队列的时候进行交换
if(node.left != null) deque.offer(node.left);
if(node.right != null) deque.offer(node.right);
}
}
return root;
}
public void swap(TreeNode root){
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
}
}