【题目】
翻转一棵二叉树。
来源:leetcode
链接:https://leetcode-cn.com/problems/invert-binary-tree/
输入:
4
/
2 7
/ \ /
1 3 6 9
输出:
4
/
7 2
/ \ /
9 6 3 1
【代码】
后序:
class Solution {
public:
//递归
TreeNode* invertTree(TreeNode* root) {
if(root==NULL)
return NULL;
invertTree(root->left);
invertTree(root->right);
swap(root->left,root->right)
return root;
}
};
深度优先
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
dfs(root);
return root;
}
void dfs(TreeNode*root){
if(root){
swap(root->left,root->right);
dfs(root->left);
dfs(root->right); }};
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if(root==NULL)
return NULL;
TreeNode* r=invertTree(root->right);
TreeNode* l=invertTree(root->left);
root->left=r;
root->right=l;
return root;
}
};
【栈】
class Solution {
public:
//stack 先序
TreeNode* invertTree(TreeNode* root) {
stack<TreeNode*> s;
s.push(root);
TreeNode* t;
while(!s.empty()){
t=s.top();
s.pop();
if(t==NULL)
continue;
swap(t->left,t->right);
s.push(t->left);
s.push(t->right);
}
return root;
}
};
【队列】
class Solution {
public:
//queue 层次
TreeNode* invertTree(TreeNode* root) {
queue<TreeNode*> q;
q.push(root);
TreeNode* t;
while(!q.empty()){
t=q.front();
q.pop();
if(t==NULL)
continue;
swap(t->left,t->right);
q.push(t->left);
q.push(t->right);
}
return root;
}
};