sdibt 2747 先序遍历二叉树(需要求深度)
来源:互联网 发布:linux mac地址 编辑:程序博客网 时间:2024/06/04 20:42
题意:已知二叉树的层次遍历的序列,求二叉树的深度及先序遍历
链接:sdibt 2747
分析:在层次遍历中,先遍历的结点,其左右孩子结点,肯定比后遍历的结点的孩子结点先遍历
二叉树中最多有两个孩子结点
即可用标记的方法,标记出孩子结点的序号,具体可以结合代码理解
代码:
#include<stdio.h>#include<stdlib.h>typedef struct stu{ struct stu *l,*r; int c;}Tree;void My_printq(Tree *T){ if(T!=NULL){ printf(" %d",T->c); My_printq(T->l); My_printq(T->r); }}int Deep(Tree *T) //求深度{ int l,r; if(T==NULL) return 0; l=1+Deep(T->l); r=1+Deep(T->r); return l>r?l:r;}int main(){ int i,j,n,m,c[1010]; Tree *T=NULL,*node[1010]; scanf("%d",&m); while(m--){ n=0; for(j=1;;j++){ scanf("%d",&c[j]); if(c[j]==-1) break; if(c[j]){ node[j]=(Tree *)malloc(sizeof(Tree)); node[j]->c=c[j]; } else node[j]=NULL; } n=j-1; i=2; T=node[1]; for(j=1;j<=n;j++){ if(c[j]){ if(i<=n) node[j]->l=node[i++]; else node[j]->l=NULL; if(i<=n) node[j]->r=node[i++]; else node[j]->r=NULL; } } n=Deep(T); printf("%d",n); My_printq(T); printf("\n"); } return 0;}
0 0
- sdibt 2747 先序遍历二叉树(需要求深度)
- sdibt 2746 二叉树的输入 (先序建树)
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- 仿360在Launcher画面显示内存使用率的浮窗(改进版)
- BZOJ 1093: [ZJOI2007]最大半连通子图
- 利用JDBC中处理批量更新oracle数据
- block,inline和inline-block概念和区别
- 10459作品展示
- sdibt 2747 先序遍历二叉树(需要求深度)
- E - Hangover(1.4.1)
- [ACM] POJ 1328 Radar Installation (贪心,区间选点问题)
- linux 学习笔记-时间管理
- 冒泡排序
- JVM和DVM的区别,你知道吗?
- cas入门之二十八:services管理控制台
- 内存泄露(一)
- D - I Think I Need a Houseboat(1.3.1)