题目描述:
翻转一棵二叉树。
示例:
输入:
4
/ \
2 7
/ \ / \
1 3 6 9
输出:
4
/ \
7 2
/ \ / \
9 6 3 1
思路:直接遍历树,递归的对调左右子树,最后返回树根。(以下的解法是:自上向下交换、自下而上交换和层次遍历)
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
//从上到下交换,类似先序遍历
struct TreeNode* invertTree(struct TreeNode* root){
struct TreeNode* tree;
if(root == NULL){
return root;
}
else{
tree = root->right;
root->right = invertTree(root->left);
root->left = invertTree(tree);
}
return root;
}
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
//自底向上,类似后序遍历
struct TreeNode* invertTree(struct TreeNode* root){
struct TreeNode* l_treenode;
struct TreeNode* r_treenode;
if(root == NULL){
return root;
}
else{
l_treenode = invertTree(root->left);
r_treenode = invertTree(root->right);
root->left = r_treenode;
root->right = l_treenode;
return root;
}
return root;
}
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
//层次遍历实现左右转换
#define maxSize 1024
struct TreeNode* invertTree(struct TreeNode* root){
if(root == NULL) return root;
int front=0 ,rear=0;
struct TreeNode* que[maxSize];
struct TreeNode* tmp;
if(root){
rear = (rear+1)%maxSize;
que[rear] = root;
}
while(front != rear){
front = (front+1)%maxSize;
struct TreeNode* tmp = que[front];
struct TreeNode* rightTree = tmp->right;
tmp->right = tmp->left;
tmp->left = rightTree;
if(tmp->right != NULL){
rear = (rear+1)%maxSize;
que[rear] = tmp->right;
}
if(tmp->left != NULL){
rear = (rear+1)%maxSize;
que[rear] = tmp->left;
}
}
return root;
}