Chinaunix首页 | 论坛 | 博客
  • 博客访问: 399113
  • 博文数量: 101
  • 博客积分: 2207
  • 博客等级: 大尉
  • 技术积分: 2508
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-19 20:45
文章分类

全部博文(101)

文章存档

2013年(15)

2012年(86)

我的朋友

分类: C/C++

2012-09-25 18:18:51

第15题:
题目:输入一颗二元查找树,将该树转换为它的镜像,
即在转换后的二元查找树中,左子树的结点都大于右子树的结点。
用递归和循环两种方法完成树的镜像转换。
例如输入:
8
/ /
6 10
// //
5 7 9 11

输出:
8
/ /
10 6
// //
11 9 7 5

 点击(此处)折叠或打开

  1. #include <iostream>
  2. struct Node
  3. {
  4.     Node* left;
  5.     Node* right;
  6.     int data;

  7.     Node(int d=0,Node* l = NULL, Node* r = NULL):data(d),left(l),right(r) {}
  8. };
  9. void convert(Node* root)
  10. {
  11.     if (root)
  12.     {
  13.         Node* temp = root->left;
  14.         root->left = root->right;
  15.         root->right = temp;
  16.         convert(root->left);
  17.         convert(root->right);
  18.     }

  19. }
  20. void prevorder(Node* root)
  21. {
  22.     if (root)
  23.     {
  24.         printf("%d,",root->data);
  25.         prevorder(root->left);
  26.         prevorder(root->right);
  27.     }
  28. }
  29. int main()
  30. {
  31.     Node* root = new Node(8);
  32.     root->left = new Node(6);
  33.     root->right = new Node(10);
  34.     root->left->left = new Node(5);
  35.     root->left->right = new Node(7);
  36.     root->right->left = new Node(9);
  37.     root->right->left = new Node(11);
  38.     convert(root);
  39.     prevorder(root);
  40. }

阅读(1050) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~