226. 翻转二叉树
难度:简单
给你一棵二叉树的根节点 root
,翻转这棵二叉树,并返回其根节点。
思路
本文使用两种方法分别解决该问题
- 递归法
- 迭代法
主要思路都是将一个节点的左子节点和右子节点交换位置,然后再按照这种方法处理其他节点,直到将整棵树都处理完成
package cn.edu.xjtu.carlWay.tree.invertTree;
import cn.edu.xjtu.Util.TreeNode.TreeNode;
import java.util.Deque;
import java.util.LinkedList;
/**
* 226. 翻转二叉树
* 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
* <p>
* https://leetcode-cn.com/problems/invert-binary-tree/
*/
public class Solution {
/**
* 递归法
*
* @param root
* @return
*/
public TreeNode invertTree(TreeNode root) {
if (root == null) {
return null;
}
TreeNode tempNode = root.left;
root.left = root.right;
root.right = tempNode;
invertTree(root.left);
invertTree(root.right);
return root;
}
/**
* 迭代法
*
* @param root
* @return
*/
public TreeNode invertTree1(TreeNode root) {
if (root == null) {
return null;
}
Deque<TreeNode> deque = new LinkedList<>();
deque.addLast(root);
while (!deque.isEmpty()) {
TreeNode node = deque.removeFirst();
TreeNode tempNode = node.left;
node.left = node.right;
node.right = tempNode;
if (node.left != null) {
deque.addLast(node.left);
}
if (node.right != null) {
deque.addLast(node.right);
}
}
return root;
}
}