diff --git a/solutions/226. Invert Binary Tree.md b/solutions/226. Invert Binary Tree.md index 3e336c3..a358a28 100644 --- a/solutions/226. Invert Binary Tree.md +++ b/solutions/226. Invert Binary Tree.md @@ -1,12 +1,21 @@ # [226. Invert Binary Tree](https://leetcode.com/problems/invert-binary-tree/description/) # 思路 -翻转二叉树。 +翻转二叉树。 + +## 思路一 递归算法的话很简单: * 若为空树则返回空即可。 * 令左子树指向翻转后的右子树,将右子树指向翻转后的左子树。 -非递归算法的话用先方向层序遍历(从右到左从上到下),然后再正常层序重新赋值即可。 +## 思路二 + +非递归算法的话类似层序遍历,因为我们要交换所有节点的左右孩子,所以我们用一个队列存放左右孩子还未交换的节点,初始为root。然后开始循环直到队列为空:出队首节点然后交换其左右孩子,然后再将其左右孩子入队(如果不为空的话)。 + +两个思路都相当于遍历二叉树,所以时间复杂度均为O(n),空间复杂度也均为O(n)。 + # C++ + +## 思路一 ``` C++ class Solution { public: @@ -19,3 +28,26 @@ public: } }; ``` + +## 思路二 +``` C++ +class Solution { +public: + TreeNode* invertTree(TreeNode* root) { + if(root == NULL) return NULL; + queueq; + q.push(root); + + TreeNode *p = NULL, *tmp = NULL; + while(!q.empty()){ + p = q.front(); q.pop(); + tmp = p -> left; + p -> left = p -> right; + p -> right = tmp; + if(p -> left) q.push(p -> left); + if(p -> right) q.push(p -> right); + } + return root; + } +}; +```