[题目]
Invert a binary tree.
4 / \ 2 7 / \ / \ 1 3 6 9to
4 / \ 7 2 / \ / \ 9 6 3 1Trivia:
This problem was inspired by this original tweet by Max Howell:
Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.
[思路]
我是看到树就会非常害怕的。。因为总是觉得很麻烦很复杂,脑子里开始过DFS。。BFS。。左根右,根左右,左右根就来了。。。
这道题的话仔细看观察一下,其实就是把一个有序的数列变成熟从从小到大的顺序变成了从大到小的顺序。
从一棵子树开始考虑,其实就是左右的孩子交换了一下,过程就是有一个tmp节点记录一下,处理完根对左右孩子处理的方法也是一样。直到root为空~
最后返回root就好。
注意:
中途返回的那些点其实都是孩子节点,没有什么意义,也不需要记录了,返回就让返回把,不用管,最后返回给主程序的点就是开始调用的时候传进去的那个点。
[代码]
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public TreeNode invertTree(TreeNode root) { if(root!=null){ TreeNode left = root.left; root.left = root.right; root.right = left; invertTree(root.left); invertTree(root.right); } return root; } }
python 版本;def invertTree (self, root): if root is None: return root; root.left, root.right = self.invertTree(root.right), invertTree(root.left); return root;