二叉树排序树中查找的路径
项目要求如下:
设计一个算法,输出在二叉排序中查找时查找某个关键字经过的路径。 
专为本项目设计的算法体现在函数int SearchBST(…)和void SearchResult()中。
实现源代码如下:
#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef int KeyType;                    //定义关键字类型
typedef char InfoType;
typedef struct node                     //记录类型
{KeyType key;                        //关键字项InfoType data;                      //其他数据域struct node *lchild,*rchild;        //左右孩子指针
} BSTNode;
int path[MaxSize];                      //全局变量,用于存放路径
void DispBST(BSTNode *b);               //函数说明
int InsertBST(BSTNode *&p,KeyType k)    //在以*p为根节点的BST中插入一个关键字为k的节点
{if (p==NULL)                        //原树为空, 新插入的记录为根节点{p=(BSTNode *)malloc(sizeof(BSTNode));p->key=k;p->lchild=p->rchild=NULL;return 1;}else if (k==p->key)return 0;else if (k<p->key)return InsertBST(p->lchild,k);  //插入到*p的左子树中elsereturn InsertBST(p->rchild,k);  //插入到*p的右子树中
}
BSTNode *CreatBST(KeyType A[],int n)
//由数组A中的关键字建立一棵二叉排序树
{BSTNode *bt=NULL;                   //初始时bt为空树int i=0;while (i<n)InsertBST(bt,A[i++]);       //将A[i]插入二叉排序树T中return bt;                          //返回建立的二叉排序树的根指针
}//在二叉排序树中查找,记经过的节点记录在path中,返回值为最后查找节点在path中存储的下标
int SearchBST(BSTNode *bt,KeyType k,KeyType path[],int i)
{if (bt==NULL)return i;else if (k==bt->key)    //找到了节点{path[i+1]=bt->key;  //输出其路径return i+1;}else{path[i+1]=bt->key;if (k<bt->key)SearchBST(bt->lchild,k,path,i+1);  //在左子树中递归查找elseSearchBST(bt->rchild,k,path,i+1);  //在右子树中递归查找}
}//查找并显示经过的路径
void SearchResult(BSTNode *bt, int k1)
{int r, j;r = SearchBST(bt,k1,path,-1);for (j=0; j<=r; j++)printf("%3d",path[j]);printf("\n");
}void DispBST(BSTNode *bt)
//以括号表示法输出二叉排序树bt
{if (bt!=NULL){printf("%d",bt->key);if (bt->lchild!=NULL || bt->rchild!=NULL){printf("(");DispBST(bt->lchild);if (bt->rchild!=NULL) printf(",");DispBST(bt->rchild);printf(")");}}
}int main()
{BSTNode *bt;KeyType k1=65, k2=32;int a[]= {43,91,10,18,82,65,33,59,27,73},n=10;printf("创建的BST树:");bt=CreatBST(a,n);DispBST(bt);printf("\n");printf("  查找%d关键字:",k1);SearchResult(bt,k1);printf("  查找%d关键字:",k2);SearchResult(bt,k2);return 0;
}
运行结果截图如下:

数据结构上机实践第14周项目2 - 二叉树排序树中查找的路径相关推荐

  1. 数据结构上机实践第14周项目1 - 验证算法(折半查找)

    验证算法(折半查找) 项目要求如下: 请用有序表{12,18,24,35,47,50,62,83,90,115,134}作为测试序列,分别对查找90.47.100进行测试. 实现源代码如下: //*C ...

  2. 数据结构上机实践第14周项目1(4) - 验证算法(平衡二叉树)

    验证算法(平衡二叉树) 项目要求如下: (1)由整数序列{43,52,75,24,10,38,67,55,63,60}构造AVL树:  (2)输出用括号法表示的AVL树:  (3)查找关键字55:  ...

  3. 数据结构上机实践第14周项目1(2) - 验证算法(分块查找)

    验证算法(分块查找) 项目要求如下: 请用22,4,23,11,20,2,15,13,30,45,26,34,29,35,26,36,55,98,56, 74,61,90,80,96,127,158, ...

  4. 数据结构上机实践第14周项目3 - 是否二叉排序树

    是否二叉排序树? 项目要求如下: 设计一个算法,判断给定的二叉树是否是二叉排序树. int JudgeBST()是设计的算法对应的实现. 实现源代码如下: //*Copyright (c)2017,烟 ...

  5. 数据结构上机实践第14周项目1(3) - 验证算法(二叉排序树)

    验证算法(二叉排序树) 项目要求如下: 认真阅读并验证二叉排序树相关算法.  (1)由整数序列{43,52,75,24,10,38,67,55,63,60}构造二叉排序树:  (2)输出用括号法表示的 ...

  6. 数据结构上机实践第10周项目1 - 二叉树算法验证

    二叉树算法验证 本次实践主要是对于二叉树算法的验证,达成对于算法熟练掌握的目的. 实践所用的二叉树算法库点击此处可以参考(编译环境:VC++6.0) 一.层次遍历算法验证 验证具体要求如下: 实现二叉 ...

  7. 第十三周 【项目2 - 二叉树排序树中查找的路径】

    /* *Copyright  (c)2017,烟台大学计算机与控制工程学院 *All rights reservrd. *作者:赵楷文 *完成时间:2017年11月26日 *版本号:v1.0 *问题描 ...

  8. 数据结构上机实践第八周项目9-广义表算法库及应用

    广义表算法库及应用 为了丰富算法库,以应对各类工程的需要,本次实践将进行广义表算法库的建立以及应用. 项目要求一: 建立广义表算法库,包括:  ① 头文glist.h,定义数据类型,声明函数:  ② ...

  9. 数据结构上机实践第八周项目2- 建立链串的算法库

    建立链串的算法库 一般每一种数据结构都不会局限于在连续空间内的存取,那我们的串自然也不反常,本次实践将建立链串的算法库,应用于有需求的工程当中,提高程序的容错性. 本次实践依然会用到多文件组织工程的建 ...

最新文章

  1. C++向量类模板(支持实数向量与复数向量的各种运算)
  2. C语言程序设计之编程求鸡和兔的只数,用穷举法解决
  3. 1. 初探MongoDB —— 介绍、安装和配置
  4. 鲲鹏云HCIA知识总结(二)
  5. ClickHouse入门
  6. vue form validate 多个input_Vue表单校验插件Vuerify使用详细教程及示例
  7. snipaste如何滚动截图_每天都在用的QQ截图,居然升级了这么多实用功能!
  8. python123测验答案测验3_知到app数学分析3-3测验答案查询服务
  9. 数学建模系列-优化模型---(一)规划模型
  10. 送书 | Web前端性能优化
  11. java 去除敏感词
  12. pgz-sbv-gf极狐低代码平台发布
  13. 龙卷风袭击广东致6死215伤 广州停
  14. 蓝色配色灵感 | 解读蓝色
  15. 本地视频做成html网页,使用HTML和JavaScript播放本地的媒体(视频音频)文件的方法...
  16. 泛微Ecology8.0移动端模板必填字段JS代码
  17. 年度回顾:短视频大逃杀
  18. xml组合时间串解析
  19. 数模分析第五天---判别分析
  20. 超级计算机在日常生活中有哪些有趣的应用

热门文章

  1. 图像椒盐噪声和高斯噪声
  2. 一篇让你看懂卷积神经网络
  3. paper reading:高光谱遥感影像空谱特征提取与分类方法研究 - 康旭东
  4. 实现labelme批量json_to_dataset方法
  5. Ubuntu用ssh连接虚拟机
  6. pycharm怎么修改python路径
  7. 【彻底解决】django migrate (mysql.W002) 【专治强迫症】
  8. python创建字典
  9. 数字个数依次叠加 s=a+aa+aaa+aaaa+aa...a
  10. 顺序表查找及其优化(Java)