Chinaunix首页 | 论坛 | 博客
  • 博客访问: 11467
  • 博文数量: 6
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 72
  • 用 户 组: 普通用户
  • 注册时间: 2014-09-20 09:37
文章分类
文章存档

2015年(6)

我的朋友

分类: C/C++

2015-12-04 19:40:55

结点:

点击(此处)折叠或打开

  1. typedef struct node{
  2.     int data;
  3.     struct node *lchild;
  4.     struct node *rchild;
  5. }Node;

先序遍历(递归)

点击(此处)折叠或打开

  1. void prev(Node* root)
  2. {
  3.     if(root!=NULL)
  4.     {
  5.         printf("%d ",root->data);
  6.         prev(root->lchild);
  7.         prev(root->rchild);    
  8.     }
  9. }
中序遍历(递归)

点击(此处)折叠或打开

  1. void mid(Node* root)
  2. {
  3.     if(root!=NULL)
  4.     {
  5.         mid(root->lchild);
  6.         printf("%d ",root->data);
  7.         mid(root->rchild);
  8.     }
  9. }
后序遍历(递归)

点击(此处)折叠或打开

  1. void pro(Node* root)
  2. {
  3.     if(root!=NULL)
  4.     {
  5.         pro(root->lchild);
  6.         pro(root->rchild);
  7.         printf("%d ",root->data);    
  8.     }
  9. }
已知先序遍历和后序遍历,求中序遍历:
先序遍历的第一个和后序遍历的最后一个是root
而先序遍历的第二个不是root的lchild就是rchild
如果先序遍历的第二个=后序遍历的倒数第二个,则是root的rchild
如果先序遍历的第二个≠后序遍历的倒数第二个,则是root的lchild
递归下去。





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