LeetCode 全题解计划之树专题:LC 226(一)

LC 226 翻转二叉树(E)

题目描述

    翻转一棵二叉树。

举个栗子

    示例: 输入: 输出:

解题思路

    我们在做二叉树题目时候,第一想到的应该是用递归来解决。 仔细看下题目的输入和输出,输出的左右子树的位置跟输入正好是相反的,于是我们可以递归的交换左右子树来完成这道题。 其实就是交换一下左右节点,然后再递归的交换左节点,右节点。 我们可以总结出递归的两个条件如下: 终止条件:当前节点为 null 时返回。 交换当前节点的左右节点,再递归的交换当前节点的左节点,递归的交换当前节点的右节点。 时间复杂度:每个元素都必须访问一次,所以是 O(n)。 空间复杂度:最坏的情况下,需要存放 O(h) 个函数调用(h 是树的高度),所以是 O(h)。

代码来了

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
          
   
    public TreeNode invertTree(TreeNode root) {
          
   
        if (root == null) {
          
   
            return null;
        }
        TreeNode tmp = root.left;
        root.left = root.right;
        root.right = tmp;
        invertTree(root.left);
        invertTree(root.right);
        return root;
    }
}
经验分享 程序员 微信小程序 职场和发展