LeetCode226. 翻转二叉树

1 题目描述

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
示例 1:
LeetCode226. 翻转二叉树_第1张图片
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
示例 2:
LeetCode226. 翻转二叉树_第2张图片
输入:root = [2,1,3]
输出:[2,3,1]

示例 3:
输入:root = []
输出:[]

来源:力扣(LeetCode)
链接:226. 翻转二叉树

2 算法设计

本题的解法较多,可以采用深度优先搜索递归地来遍历树中的每一个节点,若遍历到的节点不为空,则交换该节点的左右孩子。也可以采用广度优先搜索,从根节点开始对树中的节点进行迭代遍历,对遍历到的节点的左右孩子进行交换即可。
注意:本题目对树中节点的遍历可以既可以采用前序遍历也可以采用后序遍历,但是不能用中序遍历,至于为什么读者可以自行验证。

3 代码实现

 public TreeNode invertTree(TreeNode root) {
        reverse(root);
        return root;
    }
    
    //DFS 先序遍历
    public void reverse(TreeNode node){
        //判空,递归的终止条件
        if (node == null) return;
        //若当前节点不为空,则交换左右孩子节点
        TreeNode tmpNdoe = node.left;
        node.left = node.right;
        node.right = tmpNdoe;
        //递归左分支
        if (node.left != null){
            reverse(node.left);
        }
        //递归右分支
        if (node.right != null){
            reverse(node.right);
        }
    }

4 测试结果

LeetCode226. 翻转二叉树_第3张图片
LeetCode226. 翻转二叉树_第4张图片

你可能感兴趣的:(算法,算法,leetcode,二叉树的翻转,DFS)