leetcode刷题-226反转二叉树

196 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

leetcode226-反转二叉树

前文

本文为菜鸟的刷题记录,仅用作笔记使用,并非最佳解决方案。

题目信息

翻转一棵二叉树。

示例:

输入:


     4
   /   \
  2     7
 / \   / \
1   3 6   9

输出:

     4
   /   \
  7     2
 / \   / \
9   6 3   1

解题思路分析

解法1

本方案的主要思路,就是根据二叉树的性质进行处理。每个节点均有两个子节点,当想对二叉树进行翻转时,只需要对于所有节点的左右节点进行交换。当二叉树被翻转后,原本位于左节点的子节点将变为目标二叉树的右节点,原本位于右节点的子节点,将变为目标二叉树的左节点。也就是整个原始二叉树,将发生左右节点交换的行为。因此对于原始二叉树,从根节点开始,对于左右节点进行交换,需要利用到变量临时存储节点。同时采用递归的思想,每个节点处理过后,需要对该节点的左右节点分别进行同样的处理,将左右节点传入到递归函数中。当整个二叉树翻转结束,只需要返回原始二叉树的根节点,即得到了目标二叉树的根节点,也就是得到了目标二叉树。

public TreeNode invertTree(TreeNode root) {
        if(root == null){
            return root;
        }
        TreeNode temp = new TreeNode(0);
        temp = root.left;
        root.left = root.right;
        root.right = temp;
//        左右节点交换
        invertTree(root.left);
        invertTree(root.right);
        return root;
    }

复杂度分析

  • 时间复杂度 o(n)
  • 空间复杂度 o(n)

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。