二叉树的镜像

题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:
二叉树的镜像定义:源二叉树
8
/
6 10
/ \ /
5 7 9 11
镜像二叉树
8
/
10 6
/ \ /
11 9 7 5

// C program to convert a binary tree 
// to its mirror 
#include<stdio.h> 
#include<stdlib.h> 

/* A binary tree node has data, pointer 
to left child and a pointer to right child */
struct Node 
{ 
	int data; 
	struct Node* left; 
	struct Node* right; 
}; 

/* Helper function that allocates a new node with the 
given data and NULL left and right pointers. */
struct Node* newNode(int data) 

{ 
struct Node* node = (struct Node*) 
					malloc(sizeof(struct Node)); 
node->data = data; 
node->left = NULL; 
node->right = NULL; 
	
return(node); 
} 


/* Change a tree so that the roles of the left and 
	right pointers are swapped at every node. 

So the tree... 
	4 
	/ \ 
	2 5 
	/ \ 
1 3 

is changed to... 
	4 
	/ \ 
	5 2 
		/ \ 
	3 1 
*/
void mirror(struct Node* node) 
{ 
if (node==NULL) 
	return; 
else
{ 
	struct Node* temp; 
	
	/* do the subtrees */
	mirror(node->left); 
	mirror(node->right); 

	/* swap the pointers in this node */
	temp	 = node->left; 
	node->left = node->right; 
	node->right = temp; 
} 
} 

/* Helper function to print Inorder traversal.*/
void inOrder(struct Node* node) 
{ 
if (node == NULL) 
	return; 
	
inOrder(node->left); 
printf("%d ", node->data); 
inOrder(node->right); 
} 


/* Driver program to test mirror() */
int main() 
{ 
struct Node *root = newNode(1); 
root->left	 = newNode(2); 
root->right	 = newNode(3); 
root->left->left = newNode(4); 
root->left->right = newNode(5); 
	
/* Print inorder traversal of the input tree */
printf("Inorder traversal of the constructed"
		" tree is \n"); 
inOrder(root); 
	
/* Convert tree to its mirror */
mirror(root); 
	
/* Print inorder traversal of the mirror tree */
printf("\nInorder traversal of the mirror tree"
		" is \n"); 
inOrder(root); 
	
return 0; 
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值