Invert Binary Tree
Question
Invert a binary tree.
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 f*** off.
Example 1:
Input:
1
2
3
4
5 4
/ \
2 7
/ \ / \
1 3 6 9Output:
1
2
3
4
5 4
/ \
7 2
/ \ / \
9 6 3 1
Approach 1: 递归
这是一道很经典的二叉树问题。显然,我们从根节点开始,递归地对树进行遍历,并从叶子结点先开始翻转。如果当前遍历到的节点
1 | class TreeNode(object): |
复杂度分析
时间复杂度:O(N),其中 N 为二叉树节点的数目。我们会遍历二叉树中的每一个节点,对每个节点而言,我们在常数时间内交换其两棵子树。
空间复杂度:O(N)。使用的空间由递归栈的深度决定,它等于当前节点在二叉树中的高度。在平均情况下,二叉树的高度与节点个数为对数关系,即
。而在最坏情况下,树形成链状,空间复杂度为 O(N)。