zoukankan      html  css  js  c++  java
  • 数据结构与算法参考答案(第十四周)

    一、试写一个判别给定二叉树是否为二叉排序树的算法,设此二叉树以二叉链表作存储结构,且树中结点的关键字均不同。

    答:

    由分析可以知道,通过教材所学的知识我们很容易知道二叉排序树的特点。按照中序遍历的顺序,应当符合当前遍历到的节点值大于前一个遍历到的节点值,所以我们最终得到的中序遍历序列是一个有序序列,对于该题我们在遍历的过程中采用递归的方式进行判断。

    该算法实现的伪代码如下:

    /*

    函数名称:判断是否为二叉排序树

    传入参数:树的根节点tree

    返回值:如果是返回true,否则返回false

    */

    bool isBinaryTree(node tree){//判断是否二叉排序树

    if(tree != NULL){

    //如果左右孩子均为空

    if(tree -> lchild == NULL && tree -> rchild == NULL) {

    return true;  

    }

    else if(tree -> lchild == NULL)  {

    if(tree -> info < tree -> rchild -> info){

    return isBinaryTree(t->rchild);

    }

    else return false;

    }

    else if(tree -> rchild == NULL)  {

    if(tree -> info > tree -> lchild -> info) {

    return isBinaryTree(tree -> lchild);

    }

    else {

    return false;

    }

    }

    else{

    if(tree -> info > tree -> lchild -> info && tree -> info < tree -> rchild -> info) {

    return isBinaryTree(tree -> rchild) && isBinaryTree(tree -> lchild);

    }

    else {

    return false;

    }

    }

    }

    }

    算法分析:该算法通过递归的方式实现。思路简单,算法高效,这是解决判断是否是二叉排序树的较好的方法。

     

    二、编写递归算法,从大到小输出给定二叉排序树中所有关键字不小于x的数据元素。

    答:

    由分析可以知道,本题需要在二叉排序树中输出不小于x的数据元素。由所学的知识很容易知道:从大到小输出二叉排序树中不小于x的元素,通过从右子树到左子树的递归实现。

    该算法实现的伪代码如下:

    /*

    函数名称:输出不小于x的元素

    函数传入参数:树的根节点T,需要比较的值x

    返回值:void

    */

    void Print(BiTree &T, int x)

    {

        if(T != NULL) { //判断树是否为空

         return;

        }

        PrintBSTLx(T->rchild, x);

        if (T -> data < x) {

         return;

        }

        cout << T->data << "  ";

        PrintBSTLx(T->lchild, x);

    }

    算法分析:该算法通过递归的方式实现。思路简单,算法高效,利用二叉排序树所具有的独特性质用递归的方式进行输出。综上,这是解决该类问题的较好的算法。

    作者:LightAc
    出处:https://www.cnblogs.com/lightac/
    联系:
    Email: dzz@stu.ouc.edu.cn
    QQ: 1171613053
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    Vue 插件写法
    js创建对象的多种方式及优缺点
    webpack原理与实战
    发布高性能迷你React框架anu
    Windows 同一时候开启核心显卡与独立显卡(不接显示器启动核芯显卡)
    基于QT和OpenCV的人脸检測识别系统(1)
    Cocos2d-x中背景音乐播放暂停与继续
    使用Xcode和Instruments调试解决iOS内存泄露
    Shell 命令行快捷键
    ExtJS学习-----------Ext.Array,ExtJS对javascript中的Array的扩展(实例)
  • 原文地址:https://www.cnblogs.com/lightac/p/13558269.html
Copyright © 2011-2022 走看看