L3-1-二叉树及其遍历 / 二叉搜索树 / 完全二叉树 是否完全二叉搜索树

分数 30

全屏浏览题目

切换布局

作者 陈越

单位 浙江大学

将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果。

输入格式:

输入第一行给出一个不超过20的正整数N;第二行给出N个互不相同的正整数,其间以空格分隔。

输出格式:

将输入的N个正整数顺序插入一个初始为空的二叉搜索树。在第一行中输出结果树的层序遍历结果,数字间以1个空格分隔,行的首尾不得有多余空格。第二行输出YES,如果该树是完全二叉树;否则输出NO

输入样例1:

9
38 45 42 24 58 30 67 12 51

输出样例1:

38 45 24 58 42 30 12 67 51
YES

输入样例2:

8
38 24 12 45 58 67 42 51

输出样例2:

38 45 24 58 42 12 67 51
NO

答案:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 21;
/*--------------------------------------------
* Author:       Fw_022
* Begin:        2022年7月3日12:07:52
* End:          2022年7月3日12:48:06
* Time:         40 Min
-------------------------------------------- */
typedef struct tree
{int data;struct tree* left, * right;
}tree;int input(int a[])
{int n, i, j;cin >> n;for (i = 0; i < n; i++){cin >> a[i];}return n;
}void insertnode(int num, tree*& root)
{tree* newnode = new tree;newnode->data = num;newnode->left = newnode->right = NULL;if (!root)root = newnode;else{tree* p = root;while (p){if (num > p->data){if (p->left == NULL){p->left = newnode;return;}p = p->left;}else{if (p->right == NULL){p->right = newnode;return;}p = p->right;}}}
}tree* creattree(int a[],int n)
{tree* root = NULL;int i;for (i = 0; i < n; i++){insertnode(a[i], root);}return root;
}int dfs(tree* root)
{queue<tree*>q;q.push(root);int num = q.size();printf("%d", root->data);while (q.size()){tree* node = q.front();q.pop();if (node->left){q.push(node->left);printf(" %d", node->left->data);num++;}if (node->right){q.push(node->right);printf(" %d", node->right->data);num++;}}return num;
}int iscomplete(tree* root, int cnt)
{queue<tree*>q;q.push(root);int num = q.size();while (q.size() && num < cnt){tree* node = q.front();q.pop();if (node->left){q.push(node->left);num++;}else{if (num < cnt)return 0;}if (node->right){q.push(node->right);num++;}else{if (num < cnt)return 0;}}return 1;
}int main()
{int a[20];int n = input(a);tree* root = creattree(a, n);int num = dfs(root);int ans = iscomplete(root, num);if (ans)printf("\nYES");elseprintf("\nNO");
}

【数据结构pta】L3-1-二叉树及其遍历 / 二叉搜索树 / 完全二叉树 是否完全二叉搜索树分数 30相关推荐

  1. 数据结构(六)二叉树的遍历(递归非递归方法)

    数据结构(六)二叉树的遍历(递归非递归方法) 一.递归方法 1.先序遍历 void PreOrder(BiTree T) {visit(T);PreOrder(T->LChild)PreOrde ...

  2. 数据结构与算法之二叉树广度遍历、深度遍历总结

    什么是树,它是和链表一样都是一种抽象数据类型(ADT),包括数据结构和对数据的操作. 树是一种二维平面的数据结构结构,它也是由节点组成的,只是它的后继节点不止一个,而链表的后继节点只有一个. 树具有以 ...

  3. 【数据结构C语言】二叉树的遍历

    //实验4 二叉树的遍历 上机实验 /*本实验函数包括1.先序遍历建立二叉树(有无返回值的函数)2.先序遍历递归算法3.中序遍历递归算法4.后序遍历递归算法5.计算深度6.计算结点个数,叶子结点数 7 ...

  4. python 数据结构 树 dev get items_python数据结构之树(二叉树的遍历)

    '''树的构造 1.递归实现先序遍历.中序遍历.后序遍历 2.堆栈实现先序遍历.中序遍历.后序遍历 3.队列实现层次遍历''' #节点类 classNode(object):__slots__ = ' ...

  5. 【数据结构与算法】二叉树深度遍历

    leetcode:力扣本题链接 leetcode所有深度遍历链接 !!!后文有动画演示一定要结合动画理解!!! 遍历顺序取决于中间节点所在的位置,假如中间节点在最后,那么就是后序遍历. 在非递归算法中 ...

  6. 二叉树的遍历(c语言数据结构实验报告三)

    二叉树的遍历 一.实验目的或任务 二.实验教学基本要求 三.实验教学的内容或要求 1. 编写函数,输入字符序列,建立二叉树的二叉链表 2. 编写函数,实现二叉树的中序递归遍历算法. 3. 编写函数,实 ...

  7. PTA数据结构与算法题目集 6-9 二叉树的遍历

    PTA数据结构与算法题目集(中文) 6-9 二叉树的遍历 void InorderTraversal( BinTree BT ){if(BT==NULL)return;if(BT->Left){ ...

  8. 【数据结构基础复习】二叉树的非递归遍历(二)

    一.绪论 上一章中,我们粗略的复习了二叉树的遍历,不过是采用递归的方式遍历的.扩展来说,二叉树的遍历是可以推广到任何树结构的.但是,这里要强调一下,任何递归方法可以解决的问题都能用非递归的方法去实现. ...

  9. 数据结构笔记(二十一)--二叉树的遍历

    二叉树的遍历 一.先序遍历 二.中序遍历 三.后序遍历

最新文章

  1. maven项目密码md5加密_加密Spring Boot中的application.properties
  2. 数数正方形(ACM/ICPC World Finals)
  3. python空值填充为固定值_Python基础:numpy中空值怎样设置
  4. python图片-利用python进行识别相似图片(一)
  5. Linux C:文件描述符、IO重定向、恢复标准输入输出
  6. Text determination debug
  7. jvm(6)-java类文件结构(字节码文件)
  8. 计算机操作系统(12):计算机工作原理
  9. 新浪云python示例_Python Web框架Flask中使用新浪SAE云存储实例
  10. pandas 自定义groupby的函数
  11. django创建新的项目、App与基本配置
  12. 传西门子中国运营中近一半业务涉及行贿
  13. 如何删除C++容器中的值
  14. Java对象toString()方法
  15. poj 2741 Colored Cubes(dfs暴力枚举)
  16. 前端根据银行卡号或银行的简码动态显示logo图标
  17. WIN7运行命令大全
  18. 如何制作关于pos.txt序列的文件
  19. 无法在此iPhone上激活Touch ID,怎么解决?
  20. Android Q notification创建发送流程-framework篇

热门文章

  1. android 模糊drawable,Android ShapeDrawable笔画模糊
  2. python sum函数导入list_sum求和函数怎么在Python中使用
  3. 服务越好收入越高,300万快递小哥有了终身成长体系
  4. 2019清洁行业深度报告:解读全球TOP3清洁设备制造商最新业绩和新技术趋势
  5. Linux 释放socket资源,LwIP使用select,close socket资源释放不完全问题
  6. PC企业微信hook,获取个人二维码
  7. 如何写软件测试的归档报告?
  8. 2022年蓝牙耳机哪款好?公认音质最好的蓝牙耳机
  9. hpp头文件与h头文件的区别
  10. 知道 Redis-Cluster 么?说说其中可能不可用的情况