算法 Java Leetcode Golang

Invert a binary tree.

Question

Invert a binary tree.
See it on Leetcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
For example, given:
4
/ \
2 7
/ \ / \
1 3 6 9
It should return:
4
/ \
7 2
/ \ / \
9 6 3 1

Trivia

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.

Solution in Java, C++ and C

  • java
  • cpp
  • c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* 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) return null;
TreeNode node = new TreeNode(root.val);
node.left = invertTree(root.right);
node.right = invertTree(root.left);
return node;
}
}

Solution in Python, Javascript and CSharp

  • python
  • js
  • cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None

class Solution(object):
def invertTree(self, root):
"""
:type root: TreeNode
:rtype: TreeNode
"""

if root == None: return None
root.left, root.right = self.invertTree(root.right), self.invertTree(root.left)
return root

Solution in Golang

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func invertTree(root *TreeNode) *TreeNode {
if root == nil {
return nil
}
left := invertTree(root.Left)
right := invertTree(root.Right)
root.Left = right
root.Right = left
return root
}