leecode刷题(24)-- 翻转二叉树

Posted weixuqin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leecode刷题(24)-- 翻转二叉树相关的知识,希望对你有一定的参考价值。

leecode刷题(24)-- 翻转二叉树

翻转二叉树

翻转一棵二叉树。

示例:

输入:

     4
   /     2     7
 / \   / 1   3 6   9

输出:

     4
   /     7     2
 / \   / 9   6 3   1

备注:
这个问题是受到 Max Howell原问题 启发的 :

谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。


思路

二叉树问题,我们首先要想到的使用递归的方式来解决,有了这个思路,处理这道问题就很简单了:先互换根节点的左右节点,然后递归地处理左子树,再递归地处理右子树,直到所有的节点互换完,最后我们把 root 返回,这样便完成了二叉树的反转。

代码如下

Java描述:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode invertTree(TreeNode root) {
        if (root != null) {
            TreeNode temp = root.left;
            root.left = root.right;
            root.right = temp;
            
            invertTree(root.left);
            invertTree(root.right);
        }
        return root;
    }
}

最近在复习python,这里也写一下python描述:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def invertTree(self, root: TreeNode) -> TreeNode:
        if root:
            root.left, root.right = root.right, root.left

            self.invertTree(root.left)
            self.invertTree(root.right)

        return root

以上是关于leecode刷题(24)-- 翻转二叉树的主要内容,如果未能解决你的问题,请参考以下文章

Leecode 222. 完全二叉树的节点个数——Leecode日常刷题系列

Leecode 222. 完全二叉树的节点个数——Leecode日常刷题系列

二分法万能模板Leecode 222. 完全二叉树的节点个数——Leecode日常刷题系列

java刷题--226翻转二叉树

LeetCode Java刷题笔记—226. 翻转二叉树

Leetcode刷题100天—226. 翻转二叉树(二叉树)—day03