力扣-翻转二叉树

100 阅读2分钟

「这是我参与2022首次更文挑战的第29天,活动详情查看:2022首次更文挑战」。

翻转二叉树

题目描述

给你一颗二叉树的根节点root,翻转这颗二叉树,并返回其根节点.
示例1:

image.png

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

示例2:

image.png

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

示例3:

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

解析

由上面的图我们可以直观地看出所谓翻转这颗二叉树,其实就是保持根节点不变,将左右子树中对应的节点位置进行调换,然后得到翻转后的二叉树.所以这道题我们可以采用前序遍历和后序遍历来解决这道算法题.不能采用中序遍历的原因是中序遍历中是先将根节点与左子树的节点进行调换,如果采用中序遍历则无法保持它的根节点是不变的.

代码解析

class Solution {
    public TreeNode invertTree(TreeNode root) {
        //先判断二叉树是否为空,若为空则返回一个空值
        if(root==null){
            return null;
        }
        //采用递归的方法翻转左子树
        invertTree(root.left);
        //采用递归的方法翻转右子树
        invertTree(root.right);
        //进行翻转操作
        swap(root);
        //返回根节点,整个二叉树的根节点是不变的
        return root;
    }
    public void swap(TreeNode root){
        //此函数是为了实现交换左右子树节点功能
        TreeNode temp=root.left;
        root.left=root.right;
        root.right=temp;
        
    }
}

注意:在这里简单叙述一下二叉树的几个遍历
前序遍历
若二叉树为空,则空操作返回;否则先访问根结点--->前序遍历根结点的左子树--->前序遍历根结点的右子树
中序遍历
若二叉树为空,则空操作返回;否则先中序遍历根结点的左子树--->访问根结点--->中序遍历根结点的右子树
后序遍历
若二叉树为空,则空操作返回;否则先后序遍历根结点的左子树--->后序遍历根结点的右子树--->访问根结点
层序遍历
从二叉树的根结点开始,从上至下逐层遍历,在同一层中,则按从左到右的顺序对结点逐个访问