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

匿名 (未验证) 提交于 2019-12-02 23:32:01

翻转一棵二叉树。

示例:

输入:

     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
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!