L2-006. 树的遍历

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h> struct node
{
long left,right;
}tree[]; long a[],b[]; void work(long l,long r,long p,long q,long fa,long cond)
{
long root=a[r],pos;
for (pos=p;pos<=q;pos++)
if (b[pos]==root)
break;
if (cond==)
tree[fa].left=root;
else
tree[fa].right=root;
if (p<=pos-)
work(l,l+pos--p,p,pos-,root,);
if (pos+<=q)
work(l+pos-p,r-,pos+,q,root,);
} int main()
{
long i,head,tail,n;
long q[];
scanf("%ld",&n);
for (i=;i<=n;i++)
{
scanf("%ld",&a[i]);
tree[a[i]].left=;
tree[a[i]].right=;
}
for (i=;i<=n;i++)
scanf("%ld",&b[i]);
work(,n,,n,,); head=;
tail=;
q[]=a[n];
while (head<tail)
{
head++;
printf("%ld",q[head]);
if (tree[q[head]].left!=)
{
tail++;
q[tail]=tree[q[head]].left;
}
if (tree[q[head]].right!=)
{
tail++;
q[tail]=tree[q[head]].right;
}
if (head!=tail)
printf(" ");
}
return ;
}

L2-011. 玩转二叉树

 #include <stdio.h>
#include <stdlib.h> struct node
{
long left,right;
}tree[]; long a[],b[],q[]; void work(long x,long y,long p,long q,long father,long cond)
{
long pos,count;
if (father!=)
{
if (cond==)
tree[father].left=b[p];
else
tree[father].right=b[p];
}
for (pos=x;pos<=y;pos++)
if (a[pos]==b[p])
break;
count=pos-x;
if (count>)
work(x,pos-,p+,p+count,b[p],);
if (y-pos>)
work(pos+,y,p+count+,q,b[p],);
} void change(long d)
{
if (tree[d].left== && tree[d].right==)
return ;
long temp;
temp=tree[d].left;
tree[d].left=tree[d].right;
tree[d].right=temp;
change(tree[d].left);
change(tree[d].right);
} int main()
{
long n,i,head,tail;
scanf("%ld",&n);
for (i=;i<=n;i++)
scanf("%ld",&a[i]); //mid
for (i=;i<=n;i++)
scanf("%ld",&b[i]); //pre
for (i=;i<=n;i++)
{
tree[i].left=;
tree[i].right=;
}
work(,n,,n,,);
change(b[]); head=; tail=;
q[]=b[];
while (head<tail)
{
head++;
printf("%ld",q[head]);
if (tree[q[head]].left!=)
{
tail++;
q[tail]=tree[q[head]].left;
}
if (tree[q[head]].right!=)
{
tail++;
q[tail]=tree[q[head]].right;
}
if (head!=tail)
printf(" "); //output不能多余的空格
}
return ;
}

最新文章

  1. DevExpress免费公开课,讲解即将发布的16.2新版功能
  2. 敏捷开发Scrum
  3. 深入解析结构化异常处理(SEH)
  4. java核心知识点学习----多线程并发之线程同步
  5. Javac不是内部或外部指令
  6. PHP读取xml之cdata讲解
  7. [置顶] c#对于文件的操作
  8. Java自定义注解及使用
  9. Ubuntu使用之Svn命令小技巧
  10. 探索C++对象模型
  11. MySQL的日志(一)
  12. socket(TCP)通讯之Python实现
  13. SQLServer之删除视图
  14. es6常用的
  15. vue dialog在ios层级有问题
  16. [TJOI2017]DNA
  17. Linux命令之touch
  18. 开源项目MultiChoiceAdapter详解(三)——MulitChoiceNormalArrayAdapter的使用
  19. glob 文件或目录查找
  20. 关于Unity点击New创建新项目没反应的解决方案

热门文章

  1. sqlmap 进阶 (一)
  2. dvwa——sql手动注入和sqlmap自动注入
  3. css 剩余宽度完全填充
  4. 第十四次ScrumMeeting博客
  5. Javascript开发者 常用知识
  6. 20162325 金立清 S2 W3 C13
  7. android 的helloworld没跑起来 原因
  8. 10th 本周工作量及进度统计
  9. 第218天:Angular---模块和控制器
  10. iOS 字符串NSString 的一些常用方法