第十四周项目二(二叉树排序树中查找的路径)

来源:互联网 发布:c语言内嵌汇编 编辑:程序博客网 时间:2024/05/22 10:45

问题及代码:

 *Copyright(c)2016,烟台大学计算机与控制工程学院  *All right reserved.  *文件名称:二叉树排序树中查找的路径.cpp  *作者:张冰 *时间:12月2日  *版本号;v1.0  *问题描述:            设计一个算法,输出在二叉排序中查找时查找某个关键字经过的路径。  *输入描述:无  *程序输出:根据要求输出 */  [cpp] view plain copy#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的左子树中      else          return 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);  //在左子树中递归查找          else              SearchBST(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;  }  

运行结果:

知识点总结:

将所有的折半后的数字换成树的形式,然后在树中查找。平衡度的问题只是复杂度的问题

学习心得:

学完图之后觉得学查找轻松多了,学了数据结构有了将抽象换为不抽象的能力

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子不按时完成作业怎么办 高三理科基础不好怎么办 字写快了就难看怎么办 高一文科280分怎么办 高三了学不进去怎么办 副职兼任法人不够条件怎么办 正职和上级不和副职怎么办 中层正职和上级不和副职怎么办 陆军军官年龄大了怎么办 ps选区选多了怎么办 香港货物被海关扣了怎么办 羽绒服棉填充物不均匀了怎么办 蛀牙到牙神经了怎么办 t恤袖子长了怎么办 t恤袖子短了怎么办 ofo突然要交押金余款怎么办 裙子的腰小了怎么办 白衬衣棉质变软怎么办? 车被自行车刮了怎么办 刮花别人的车门怎么办 破腹产九个月意外怀孕怎么办 破腹产一年半意外怀孕怎么办 37天流产了该怎么办 旧鞋穿着磨脚了怎么办 皮鞋磨脚怎么办小窍门 拉链从下面开了怎么办 高帮足球鞋松了怎么办 橡筋裤头太紧了怎么办 内增高鞋跟太高怎么办 电脑增高架高了怎么办 银行取钱走后回来说少了怎么办 运动t桖太大了怎么办 袖口松紧太紧了怎么办 衣服穿着就皱了怎么办 麻料的衣服很皱怎么办 麻料衣服皱了怎么办 棉麻裤子皱了怎么办 裙子屁股坐皱了怎么办 真丝衣服洗皱了怎么办 粘纤的衣服皱了怎么办 硅胶手机壳粘灰怎么办