leetcode 226. 翻转二叉树
题目描述
翻转一棵二叉树。
示例:
输入:
4
/ \
2 7
/ \ / \
1 3 6 9
输出:
4
/ \
7 2
/ \ / \
9 6 3 1
解题思路
递归的方法: 递归的出口是节点是否为空,然后不断的交换左右节点就可以了。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if(!root){
return root;
}
TreeNode* temp = root->left;
root->left = invertTree(root->right);
root->right = invertTree(temp);
return root;
}
};
迭代的方法: 先使用队列存储头节点,然后交换其左节点和右节点,再把左右节点添加到队列中,然后队列的头部元素出队列。同样的方法交换当前节点的左右节点,知道队列为空为止。(其实是层序遍历的方法,只不过在遍历的过程中,多了一个交换节点的过程)
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if(root == NULL){
return NULL;
}
int pushNum = 1, popNum = 0;
queue<TreeNode*> q;
q.push(root);
while(!(q.empty())){
// 交换左右节点
TreeNode* temp = q.front()->left;
q.front()->left = q.front()->right;
q.front()->right = temp;
// 向队列中添加元素
if(q.front()->left != NULL){
q.push(q.front()->left);
}
if(q.front()->right != NULL){
q.push(q.front()->right);
}
q.pop();
}
return root;
}
};
欢迎大家关注我的个人公众号,同样的也是和该博客账号一样,专注分享技术问题,我们一起学习进步