题目描述
解析
怎么把二叉树翻转?通过观察,我们发现只要把每个节点的左右孩子进行交换就OK了。那怎么进行交换?有两种方式:1. 自顶向下翻转 2.自底向上翻转
自顶向下翻转(前序遍历)
从根节点开始,先把根节点左右子树翻转过来,再进入左子树,把左子树内部的左右子树进行翻转,同理把右子树内部的左右子树进行翻转,依此类推,,,最终把二叉树全部翻转过来。即先交换左右子树,再通过递归把内部的子树进行翻转,即先交换,再递归,在“递”的过程中解决问题。代码如下:
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root == null) return root; //root为空直接返回
//交换左右节点
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
invertTree(root.left); //递归,继续反转左子树
invertTree(root.right