LeetCode 226.翻轉二叉樹(C++)遞迴
阿新 • • 發佈:2021-02-02
技術標籤:LeetCode刷題二叉樹演算法c++資料結構遞迴演算法
遞迴思路與演算法
這是一道很經典的二叉樹問題。顯然,我們從根節點開始,遞迴地對樹進行遍歷,並從葉子結點先開始翻轉。如果當前遍歷到的節點 root 的左右兩棵子樹都已經翻轉,那麼我們只需要交換兩棵子樹的位置,即可完成以 root 為根節點的整棵子樹的翻轉。
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if (root == nullptr) {
return nullptr;
}
//從根節點開始,遞迴地對樹進行遍歷,並從葉子結點先開始翻轉
TreeNode* left = invertTree(root->left);
TreeNode* right = invertTree(root->right);
//當最底層子節點時,對調該結點的左右子節點
root->left = right;
root->right = left;
return root;
}
};
複雜度分析
時間複雜度:O(N),其中 N 為二叉樹節點的數目。我們會遍歷二叉樹中的每一個節點,對每個節點而言,我們在常數時間內交換其兩棵子樹。