c++ 有序二叉树的应用

实作:以有序二叉树记录学生签到时间及名字,然后以名字升序输出学生签到信息

stricmp,strcmpi

原型:extern int stricmp(char *s1,char * s2);

用法:#include <string.h>

功能:比较字符串s1和s2,但不区分字母的大小写。

说明:strcmpi是到stricmp的宏定义,实际未提供此函数。

当s1<s2时,返回值<0

当s1=s2时,返回值=0

当s1>s2时,返回值>0

一、修改 CreateNode
struct node * CreateNode(char *name)
{
    time_t t;
    tm *timfo;
    struct node *p=malloc(sizeof(struct node));
    p->pLeft=p->pRight=NULL;
    //复制name
    strcpy(p->name,name); //获取名字

    time(&t);
    timfo= localtime(&t); //取当前系统时间
    node->stuTime.hour=timfo->tm_hour;//时
    node->stuTime.min=timfo->tm_min;//分
    node->stuTi
二、修改 AddNode
  struct node * AddNode(struct node * pNode,char *v)
{
    //情况一pNode==NULL
    if (pNode==NULL)
    {
        return CreateNode(v);
    }
    // pNode->data=v
    if (stricmp(pNode->name,v)==0)
    {

        return pNode;
    }
    //v大于结点数据
    if (stricmp(v,pNode->name)>0)
    {
        if (pNode->pRight==NULL)
        {
            pNode->pRight=CreateNode(v);
            return pNode->pRight;
        }else return AddNode(pNode->pRight,v); //递归调用
    }
    //v小于结点数据
    if (stricmp(v,pNode->name)<0)
    {
        if (pNode->pLeft==NULL)
        {
            pNode->pLeft=CreateNode(v);
            return pNode->pLeft;
        }else return AddNode(pNode->pLeft,v); //递归调用
    }

    return NULL;
}
三、修改 Traversal
  void traversal(struct node* pNode)
{ int i;
    if (pNode->pLeft!=NULL)
    {
        traversal(pNode->pLeft);
    }

        printf("%s,",pNode->name);

    if (pNode->pRight!=NULL)
    {
            traversal(pNode->pRight);
    }

}
时间: 2024-10-20 16:27:27

c++ 有序二叉树的应用的相关文章

C语言实现有序二叉树(1)

在cpp中使用的C语言 头文件 1 /* 有序二叉树 BsTree */ 2 #ifndef _BT_H 3 #define _BT_H 4 /*节点*/ 5 typedef struct BsTreeNode 6 { 7 int data;/* 数据 */ 8 struct BsTreeNode* left;/* 左子树 */ 9 struct BsTreeNode* right;/* 右子树 */ 10 }BSTREE_NODE; 11 /* 二叉树 */ 12 typedef struct

二叉查找树(二叉排序树、有序二叉树)算法分析及实现

二叉查找树一般采用二叉链表作为其存储结构,我们这次也采用这样的实现.二叉查找树一般有查找.插入和删除等操作,其中查找是基础,没有查找,插入和删除则无从谈起:而删除算是难点,需处理四种不同的情况,分别是: 无左右孩子,(采取直接删除,须处理其父节点指针) 只有左孩子,(采取其父节点指针指向其左孩子) 只有右孩子.(采取其父节点指针指向其右孩子) 左右孩子都存在,(采取以直接前驱或直接后继代替,实现中我们采用直接前驱代替). 查找的过程比较简单,如果该节点不为空,若其值大于key(要查找的值),则继

Java版——二叉树

1.一般有2i个节点在第i+1层上,满足这个条件的树称作是完全二叉树. 2.对于所有的非空二叉树,如果它的中间节点都恰好有两个非空子女,那么叶的数目m大于中间节点的数目k,并且m=k+1. 证明:1??如果一个树仅有一个根,那么很容易验证上述条件.假如他对某个树成立,就将两个树连接到一个已存在的树叶上,则该树叶就称为一个中间节点,所以m减少了1,而k增加了1.但是,因为新添加了两个树叶到树上,m有增加了2.增加2且减少1,以及m=k+1,可得等式(m-1)+2=(k+1)+1,正是需要的结果.这

数据结构之---二叉树C实现

学过数据结构的都知道树.那么什么是树? 树(tree)是包括n(n>0)个结点的有穷集.当中: (1)每一个元素称为结点(node): (2)有一个特定的结点被称为根结点或树根(root). (3)除根结点之外的其余数据元素被分为m(m≥0)个互不相交的集合T1,T2,--Tm-1,当中每个集合Ti(1<=i<=m)本身也是一棵树.被称作原树的子树(subtree). 树也能够这样定义:树是由根结点和若干颗子树构成的.树是由一个集合以及在该集合上定义的一种关系构成的.集合中的元素称为树的

数据结构与算法--二叉树(一)

1 基于二叉链表的有序二叉树 1.1 问题 BST是Binary Search Tree的缩写,译为二叉搜索树,或有序二叉树,是二叉树的一种,它的定义如下: 1)或者是一棵空树: 2)或者是具有下列性质的二叉树: I) 若左子树不空,则左子树上所有结点的值均小于它的根结点的值: II) 若右子树不空,则右子树上所有结点的值均大于它的根结点的值: III)左.右子树也分别为二叉排序树: BST在查找一个结点或插入一个结点时,具有极大的优势,速度非常快.是一种基础性数据结构,广泛应用于更加抽象的集合

二叉树建立记录(PHP实现)

前段时间一直在看算法问题,现在把研究的结果贴出来. 1.建立普通二叉树 <?php class Node { public $value = 0; public $l = null; public $r = null; }; //构建树 function buildTree($a, $low, $high) { if ($low > $high) { return null; } $m = floor(($low + $high)/2); $node = new Node; $node->

数据结构与算法分析java——树2(二叉树类型)

1. 二叉查找树 二叉查找树(Binary Search Tree)/  有序二叉树(ordered binary tree)/ 排序二叉树(sorted binary tree) 1). 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 2). 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值: 3). 任意节点的左.右子树也分别为二叉查找树. 4). 没有键值相等的节点(no duplicate nodes). public class BinarySe

C++实现搜索二叉树

二叉查找树(英语:Binary Search Tree),也称二叉搜索树.有序二叉树(英语:ordered binary tree),排序二叉树(英语:sorted binary tree),是指一棵空树或者具有下列性质的二叉树: 任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值: 任意节点的左.右子树也分别为二叉查找树: 没有键值相等的节点. #pragma once template<class K, cla

在路上---学习篇(一)Python 数据结构和算法 (5)二分查找、二叉树遍历

独白: 利用算法进行查找指定元素,最近学习二分查找和二叉树遍历.二分查找前提是在有序中进行查找,二叉树引入了树的概念.树的概念其中有许多小知识点,也是一种新的数据结构.还是之前的感悟,需了解其本质才会写出更好的算法. 二分查找 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用