翻转一棵二叉树
样例
1 1
/ \ / \
2 3 => 3 2
/ \
4 4
递归版本
先翻转左子树,后翻转右子树,然后对整个树进行翻转
void swapTree(TreeNode *&root){
TreeNode *tmp = root->left;
root->left = root->right;
root->right = tmp;
}
void invertBinaryTree(TreeNode *root) {
// write your code here
if(root == NULL)
return;
invertBinaryTree(root->left);
invertBinaryTree(root->right);
swapTree(root);
}
非递归版本
非递归版本用栈来实现,到访问到头节点的时候,将其左子树和右子树互换即可。
void swapTree(TreeNode *&root){
TreeNode *tmp = root->left;
root->left = root->right;
root->right = tmp;
}
void invertBinaryTree(TreeNode *root) {
// write your code here
if(root == NULL)
ret