Учитывая root
бинарного дерева, инвертировать дерево и вернуть его корень.
Пример 1:
Input: root = [4,2,7,1,3,6,9] Output: [4,7,2,9,6,3,1]
Пример 2:
Input: root = [2,1,3] Output: [2,3,1]
Пример 3:
Input: root = [] Output: []
Ограничения:
- Количество узлов в дереве находится в диапазоне
[0, 100]
. -100 <= Node.val <= 100
Решение:-
Интуиция
В этом вопросе мы должны инвертировать бинарное дерево.
Поэтому мы используем Обход пост-порядка, в котором сначала мы идем в левое поддерево. а затем в Правом поддереве возвращаемся к Родительскому узлу.
Когда мы возвращаемся к родительскому узлу, мы меняем местами его Левое поддерево и Правое поддерево.
Подход
Сложность
- Временная сложность: O(N)
- Сложность пространства: O(N) Рекурсивное пространство стека
Код
class Solution { public: TreeNode* invertTree(TreeNode* root) { // Base Case if(root==NULL) return NULL; invertTree(root->left); //Call the left substree invertTree(root->right); //Call the right substree // Swap the nodes TreeNode* temp = root->left; root->left = root->right; root->right = temp; return root; // Return the root } };