leetcode226題 題解 翻譯 C語言版 Python版
阿新 • • 發佈:2019-01-10
226. Invert Binary Tree
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.
226.翻轉二叉樹
把一棵二叉樹翻轉(如圖)
冷知識:
這個問題啟迪於Max Howell的這個推文
谷歌:雖然我們90%的工程師用你寫的軟體(Homebrew),但你卻不能在一卻白板上翻轉一個二叉樹,所以滾蛋吧。
(Homebrew是Mac平臺上的軟體包管理器,作者是Max Howell,但Max Howell被谷歌拒絕聘用,原因是演算法能力不行,所以他發了這條推文。)
思路:從圖上看是要把每棵樹的左右子樹互換,所以可以用遞迴快速解決問題。對於任意一個結點,先將其左子樹呼叫當前函式完成翻轉,再將其右子樹呼叫當前函式完成翻轉。然後交換左右子樹,返回這個結點即可。遞迴的終點是判斷給的結點值是否為空,如果為空說明到達葉結點的子樹了,直接返回空就行了。程式碼中可寫的稍微簡練些,先記錄左子樹,然後讓右子樹完成翻轉後賦給左子樹,左子樹完成翻轉後賦給右子樹。Python中可直接兩個變數一起賦值,無需記錄。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ struct TreeNode* invertTree(struct TreeNode* root) { if (root == NULL) return NULL; struct TreeNode* left = root->left; root->left = invertTree(root->right); root->right = invertTree(left); return root; }
# 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