翻转一棵二叉树。
示例:
输入:
4
/ \
2 7
/ \ / \
1 3 6 9
输出:
4
/ \
7 2
/ \ / \
9 6 3 1
解:
1、没有void的递归,哈哈,我终于写出来了没有void的了,加深理解的第一步
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if (!root) {
return root;
}
TreeNode* righttNode = invertTree(root -> right);
TreeNode* leftNode = invertTree(root -> left);
root -> left = righttNode;
root -> right = leftNode;
return root;
}
};
2、还是有void的递归
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
inver(root);
return root;
}
void inver(TreeNode* &root) {
if (!root) {
return ;
}
inver(root -> right);
inver(root -> left);
swap(root -> right, root -> left);
}
};
3、 迭代
层序迭代,乱杀
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if (root == nullptr){
return root;
}
stack<TreeNode*> myStack;
myStack.push(root);
while (!myStack.empty()) {
TreeNode* tempNode = myStack.top();
swap(tempNode -> left,tempNode -> right);
myStack.pop();
if (tempNode -> left) {
myStack.push(tempNode -> left);
}
if (tempNode -> right) {
myStack.push(tempNode -> right);
}
}
return root;
}
};