题目
给你一棵二叉树的根节点 root
,翻转这棵二叉树,并返回其根节点。
示例 1:
输入: root = [4,2,7,1,3,6,9]
输出: [4,7,2,9,6,3,1]
题解
方式一:递归
自下而上翻转
public TreeNode invertTree(TreeNode root) {
// 结束条件
if (root == null) {
return null;
}
// 翻转当前节点的左右子树
TreeNode subLeft = invertTree(root.left);
TreeNode subRight = invertTree(root.right);
// 交换当前节点的左右节点
root.right = subLeft;
root.left = subRight;
return root;
}
方式二:迭代
自上而下翻转
public TreeNode invertTree(TreeNode root) {
if (root == null) return null;
Deque<TreeNode> deque = new LinkedList<>();
deque.offer(root);
while (!deque.isEmpty()) {
TreeNode node = deque.poll();
// 交换当前节点的左右节点
TreeNode tem = node.left;
node.left = node.right;
node.right = tem;
// 子节点不为空就加入队列,后面处理
if (node.left != null) {
deque.offer(node.left);
}
if (node.right != null) {
deque.offer(node.right);
}
}
return root;
}
总结
算法:递归
、迭代