设计一个算法,判断一个二叉树是否为二叉排序树,并求出指定结点在给定二叉排序树中的层次假设根结点的层次是1)。要求:(1)按先序次序建立二叉树;(2)判断给定的二叉树是否为二叉排序树;(3)计算结点在二叉树中的层次。【输入形式】两行,第一行:按先序次序建立二叉树序列(#表示空),第二行待判断层次的结点【输出形式】两行,第一行:如果该序列构成一棵二叉排序树,则在屏幕上输出”yes”,否则输出”no”;第二行给出给定结点的层次,若无该结点,则输出“0”。【样例输入】85.50,20##70##100##50【样例输出】4yes
1个回答
关注
展开全部
问题分析:
本程序要求实现判定一棵二叉树是否为二叉排序树。为实现上述功能,需要解决的关键问题是:建立一棵二叉树及判定二叉树过程。
概要设计:
建立一个以二叉链表方式存储的二叉树,输入结点信息时按照完全二叉树的结点顺序输入。由于一棵二叉排序树中序遍历后的序列是递增有序的,因此可利用中序遍历一棵二叉树后的序列是否递增有序来判断是否为二叉排序树。
详细设计:
建立二叉树时,按照完全二叉树的结点顺序输入,“1”表示虚结点,“0”表示输入结束。
若不是虚结点时,则建立一个新结点,并且将其作为左孩子或右孩子结点连接到它的父结点上(第一个结点无父结点);若是虚结点,则将空结点(NULL)作为左孩子或右孩子结点连接到它的父节点上。
判定二叉树时,中序遍历整棵二叉树,访问根结点时将根结点信息存入一个数组中,以用来比较中序遍历后序列是否为空。比较数组元素时,从下标为0的数组元素开始比较,先将下标为i=0的a[i]与下标为1的a[i+1]比较,如果a[i]>a[i+1],则结束比较,即该二叉树不是二叉排序树,否则继续比较,直至比较完整个数组元素。
咨询记录 · 回答于2022-01-07
设计一个算法,判断一个二叉树是否为二叉排序树,并求出指定结点在给定二叉排序树中的层次假设根结点的层次是1)。要求:(1)按先序次序建立二叉树;(2)判断给定的二叉树是否为二叉排序树;(3)计算结点在二叉树中的层次。【输入形式】两行,第一行:按先序次序建立二叉树序列(#表示空),第二行待判断层次的结点【输出形式】两行,第一行:如果该序列构成一棵二叉排序树,则在屏幕上输出”yes”,否则输出”no”;第二行给出给定结点的层次,若无该结点,则输出“0”。【样例输入】85.50,20##70##100##50【样例输出】4yes
问题分析:本程序要求实现判定一棵二叉树是否为二叉排序树。为实现上述功能,需要解决的关键问题是:建立一棵二叉树及判定二叉树过程。概要设计:建立一个以二叉链表方式存储的二叉树,输入结点信息时按照完全二叉树的结点顺序输入。由于一棵二叉排序树中序遍历后的序列是递增有序的,因此可利用中序遍历一棵二叉树后的序列是否递增有序来判断是否为二叉排序树。详细设计:建立二叉树时,按照完全二叉树的结点顺序输入,“1”表示虚结点,“0”表示输入结束。若不是虚结点时,则建立一个新结点,并且将其作为左孩子或右孩子结点连接到它的父结点上(第一个结点无父结点);若是虚结点,则将空结点(NULL)作为左孩子或右孩子结点连接到它的父节点上。判定二叉树时,中序遍历整棵二叉树,访问根结点时将根结点信息存入一个数组中,以用来比较中序遍历后序列是否为空。比较数组元素时,从下标为0的数组元素开始比较,先将下标为i=0的a[i]与下标为1的a[i+1]比较,如果a[i]>a[i+1],则结束比较,即该二叉树不是二叉排序树,否则继续比较,直至比较完整个数组元素。
需要完整代码过程
#include "stdafx.h"#include#include#include#include"string"#include"malloc.h"#define max 100typedef struct node { int data; node *lchild, *rchild;}Bitree;Bitree *B[max];int temp = 0;int Btree[max];void Inorder(Bitree *T) { //中序遍历二叉树,并将每个结点数据存入数组中 if (T != NULL) { Inorder(T->lchild); printf("%d\t", T->data); Btree[temp] = T->data; temp++; Inorder(T->rchild); }}int Judgesort_bitree(int Btree[]) { //判断是否是二叉排序树 int i, sign = 1; for (i = 0; iBtree[i + 1]) { sign = 0; break; } } return sign;}void Judgeout(int a) { //判断输出 if (a == 1) printf("给定二叉树是二叉排序树!\n"); if (a == 0) printf("给定二叉树不是二叉排序树!\n");}Bitree *Creatree() { //建立二叉树 Bitree *T, *S; int ch; int front, rear, sign; sign = 0; front = 0; rear = -1; T = NULL; printf("建立二叉树(1表示虚结点,0表示输
希望可以帮助到你哦
不全,没有主函数
好吧
那帮助不了你了,不好意思呢
感谢您的支持与信任,后续有任何问题都可以随时联系哦~期待下次为您提供更优质的服务,祝您工作顺利,生活愉快~希望可以给个赞哦~谢谢