mirror of
https://github.com/ShusenTang/LeetCode.git
synced 2024-09-02 14:20:01 +00:00
update 226
This commit is contained in:
parent
3b6d59d4fc
commit
fd6044fa6b
@ -1,12 +1,21 @@
|
|||||||
# [226. Invert Binary Tree](https://leetcode.com/problems/invert-binary-tree/description/)
|
# [226. Invert Binary Tree](https://leetcode.com/problems/invert-binary-tree/description/)
|
||||||
# 思路
|
# 思路
|
||||||
翻转二叉树。
|
翻转二叉树。
|
||||||
|
|
||||||
|
## 思路一
|
||||||
递归算法的话很简单:
|
递归算法的话很简单:
|
||||||
* 若为空树则返回空即可。
|
* 若为空树则返回空即可。
|
||||||
* 令左子树指向翻转后的右子树,将右子树指向翻转后的左子树。
|
* 令左子树指向翻转后的右子树,将右子树指向翻转后的左子树。
|
||||||
|
|
||||||
非递归算法的话用先方向层序遍历(从右到左从上到下),然后再正常层序重新赋值即可。
|
## 思路二
|
||||||
|
|
||||||
|
非递归算法的话类似层序遍历,因为我们要交换所有节点的左右孩子,所以我们用一个队列存放左右孩子还未交换的节点,初始为root。然后开始循环直到队列为空:出队首节点然后交换其左右孩子,然后再将其左右孩子入队(如果不为空的话)。
|
||||||
|
|
||||||
|
两个思路都相当于遍历二叉树,所以时间复杂度均为O(n),空间复杂度也均为O(n)。
|
||||||
|
|
||||||
# C++
|
# C++
|
||||||
|
|
||||||
|
## 思路一
|
||||||
``` C++
|
``` C++
|
||||||
class Solution {
|
class Solution {
|
||||||
public:
|
public:
|
||||||
@ -19,3 +28,26 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## 思路二
|
||||||
|
``` C++
|
||||||
|
class Solution {
|
||||||
|
public:
|
||||||
|
TreeNode* invertTree(TreeNode* root) {
|
||||||
|
if(root == NULL) return NULL;
|
||||||
|
queue<TreeNode *>q;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
```
|
||||||
|
Loading…
Reference in New Issue
Block a user