数据结构练习题---先序遍历二叉树
数据结构练习题---先序遍历二叉树
总提交:107 测试通过:64
描述
给定一颗二叉树,要求输出二叉树的深度以及先序遍历二叉树得到的序列。本题假设二叉树的结点数不超过1000。
输入
输入数据分为多组,第一行是测试数据的组数n,下面的n行分别代表一棵二叉树。每棵二叉树的结点均为正整数,数据为0代表当前结点为空,数据为-1代表二叉树数据输入结束,-1不作处理。二叉树的构造按照层次顺序(即第1层1个整数,第2层2个,第3层4个,第4层有8个......,如果某个结点不存在以0代替),比如输入:
1 2 0 3 4 -1得到的二叉树如下:
输出
输出每棵二叉树的深度以及先序遍历二叉树得到的序列。
样例输入
1 -1
1 2 0 3 4 -1
样例输出
3 1 2 3 4
解题思路:首先对输入的数组进行建树,编号为x的结点的左儿子编号一定为2*x,右儿子编号一定为2*x+1,那么根据这个规律就可以把树建好了,然后递归求深度。。。
代码如下:
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <map>
#include <iostream>
using namespace std;
int s[1011],n;
/*typedef struct node
{int k;struct node *l,*r;
}node,*tree;*/
typedef struct node* tree;
typedef struct node* tree_lr;
struct node{int k;tree_lr l,r;
};
void bulid_tree(tree &t,int x)///建树
{if(x>n|| s[x]==0){t=NULL;return ;}t=new node;t->k=s[x];bulid_tree(t->l,2*x);bulid_tree(t->r,2*x+1);
}
int height_tree(tree t)///计算深度
{int l=0,r=0;if(t==NULL) return 0;l=height_tree(t->l)+1;r=height_tree(t->r)+1;return l>r ? l : r;
}void print_tree(tree t)///输出,其中中序和后序,只要改变输出顺序就可以了
{if(t){printf(" %d",t->k);print_tree(t->l);print_tree(t->r);}
}
int main()
{tree t;t=NULL;int T;scanf("%d",&T);while(T--){n=1;while(scanf("%d",&s[n])!=EOF)if(s[n]==-1) break;else n++;n--;bulid_tree(t,1);printf("%d",height_tree(t));print_tree(t);printf("\n");}return 0;
}
数据结构练习题---先序遍历二叉树相关推荐
- //数据结构:先序、中序、后序遍历二叉树。输入数据:abd##eg###c#f#h##
//数据结构:先序.中序.后序遍历二叉树.输入数据:abd##eg###c#f#h## #include <stdio.h> #include <stdlib.h> //定义数 ...
- 数据结构 非递归实现中序遍历二叉树
参考书籍:c++ 数据结构 之前提到用递归的方法实现中序遍历二叉树,但是递归会浪费大量的空间与时间.这时候我们就在想用没有一种方式能够不依赖递归去实现遍历二叉树.我们之前学过一种数据结构可以实现这种方 ...
- 数据结构-----后序遍历二叉树非递归算法(利用堆栈实现)
一.非递归后序遍历算法思想 后序遍历的非递归算法中节点的进栈次数是两个,即每个节点都要进栈两次,第二次退栈的时候才访问节点. 第一次进栈时,在遍历左子树的过程中将"根"节点进栈,待 ...
- C++数据结构——中序遍历二叉树
中序遍历二叉树 按完全二叉树的层次遍历给出一棵二叉树的遍历序列(其中用0表示虚结点),要求输出该二叉树的深度及中序遍历该二叉树得到的序列. 输入格式: 首先输入一个整数T,表示测试数据的组数,然后是T ...
- (※)中序遍历二叉树的非递归算法
在此之前,我们已经学习了中序遍历二叉树的递归算法,相信大家已经将其牢牢掌握了. 除了使用递归思想作为求解问题的钥匙,还可以借助栈来以非递归方式实现该问题的求解. 首先,我们要讨论存储二叉树结点信息的栈 ...
- 中序遍历二叉树的非递归实现(利用栈)
中序遍历二叉树的非递归实现 之前的博客写了递归的实现,说白了也就是不断自己调用自身,保持左根右的顺序.只需写出整体逻辑结构,程序会自己递归复杂的过程,大体即为: void inTraverseByRe ...
- 非递归先、中、后序遍历二叉树(C语言)
文章目录 前言 一.二叉树非递归遍历算法 1.先序遍历 2.中序遍历 3.后序遍历 二.完整程序 三.运行结果实例 前言 本程序采用C语言编写,栈和二叉树的基本操作函数基于严蔚敏老师的<数据结构 ...
- 非递归先序遍历二叉树总结(3种方法)
算法 非递归先序遍历二叉树总结(3种方法) @author:Jingdai @date:2020.12.03 传送门 非递归中序遍历二叉树 非递归后序遍历二叉树 递归先序遍历二叉树非常的简单,但是面试 ...
- php循环方法实现先序、中序、后序遍历二叉树
二叉树是每个节点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree)和"右子树"(right subtree). <?phpnam ...
最新文章
- [译] 解密 Uber 如何使用RNN预测极端事件
- 什么工作,未来可以走创业路线?
- hugo采用gitalk添加留言功能
- 全球及中国明装灯具市场规模预测及产量需求渠道分析报告2022-2027年
- python脚本转换成apk_apktool反编译apk并回编译
- java native 开发环境搭建_Java3D 集成开发环境部署与配置(含实例)
- linux 周期性任务,Linux任务计划,周期性任务执行详解
- 动易 转 html5,动易2005版系统默认风格及修改方法
- 机器视觉——2019试卷
- 3dmax中如何导出多个动画
- 【Web前端面试笔试题】2022.08
- Unti12. linux中的软件的管理
- maven 安装配置 - vscode for java
- php 获取照片信息,PHP如何读取照片的exif信息实现代码(2)
- 网易邮箱大师代收gmail
- asp毕业设计——基于asp+access的新闻发布系统设计与实现(毕业论文+程序源码)——新闻发布系统
- 校验和(Checksum)算法-概述
- 意大利赢了,老婆笑了,黄健翔疯了……
- Linux下deb安装包的安装教程
- 思考:测试人员如何快速成长