`
yangshen998
  • 浏览: 1288832 次
文章分类
社区版块
存档分类
最新评论

求出一个排序二叉树中结点度数为一的结点个数

 
阅读更多

#include<stdio.h>

#include<iostream.h>

#include<conio.h>

#include<malloc.h>

#include<stdlib.h>

#define ERROR 0

#define STACK_INIT_SIZE 100

#define OVERFLOW -1

#define FALSE 0

#define TRUE 1

#define OK 1

int i=0;

struct tree{

char data;

struct tree *Lchild,*Rchild;

};

typedef struct tree SElemType;

typedef int Status ;

struct STACK

{

SElemType *base;

SElemType *top;

int stacksize;

};

typedef struct STACK *pSqstack;

typedef struct STACK SqStack;

Status InitStack(SqStack **S)

{

(*S)=(SqStack *)malloc(sizeof(SqStack));

(*S)->base=(SElemType *)malloc(STACK_INIT_SIZE *sizeof(SElemType));

if(!(*S)->base) exit (OVERFLOW);

(*S)->top=(*S)->base;

(*S)->stacksize=STACK_INIT_SIZE;

return OK;

}

Status StackEmpty(SqStack S)

{

if(S.top==S.base) return TRUE;

else

return FALSE;

}

Status Push(SqStack *S,SElemType e)

{

*(S->top++)=e;

return OK;

}

Status Pop(SqStack *S,SElemType *e)

{

if(S->top==S->base) return ERROR;

e=--S->top;

return OK;

}

void Visite(struct tree *t)

{

if(t) printf("%c",t->data);

}

struct tree *create_btree(struct tree *t,struct tree *r,char data)//创建二叉树

{

if (r ==0 )

{

r=new (struct tree);

if ( r == 0)

{

printf("Out of memory/n"); return 0 ;

}

r->Lchild= 0; r->Rchild=0; r->data=data;

if (t)

{

if(data<t->data) t->Lchild=r;

else

t->Rchild=r;

}

else

{

r->Rchild=0; r->Lchild = 0;

}

return r;

}

if(data<r->data)

create_btree(r,r->Lchild,data);

else

create_btree(r,r->Rchild,data);

return t;

}

void PreOrderUnrec(struct tree *t,SqStack *s)//前序遍历二叉树

{

InitStack(&s);

struct tree *p,*q;

p=t;

while (p!=0||!StackEmpty(*s))

{

while (p!=0) //遍历左子树

{

Visite(p);

if((p->Lchild==0||p->Rchild==0)&&(p->Lchild!=p->Rchild))

{printf(" o ");

i++;};

Push(s,*p);

p=p->Lchild;

};//endwhile

while (!StackEmpty(*s)) //通过下一次循环中的内嵌while实现右子树遍历

{

Pop(s,p);

q=s->top;

//Pop(s,p);

p=q->Rchild;

Visite(p);

printf("?");

};//endif

};//endwhile

}//PreOrderUnrec

void main()

{

char s[100], e;

SqStack *Sa;

struct tree *t=0;

printf("Input a letter for Creating the Binary_Tree ( Directly press <Enter> to stop ):/n");

while (*s){

printf("/nInput a letter: ");

e=getch(); /*#include<conio.h>*/

putch(e); /*#include<conio.h>*/

if(e==13) break;

if (!t)

t=create_btree(t,t,e);

else

create_btree(t,t,e);

};

printf("/n");

PreOrderUnrec(t,Sa);

printf("度数为一的结点数为:%d",i);

printf("结束请按q!");

if(getchar()=='q') printf("再见");

else {while(1);};

}

分享到:
评论

相关推荐

    大二实验 二叉树的建立求叶子结点度为2的结点

    求度为2的节点数量,也就是具有两个子节点的节点数,同样可以通过遍历二叉树实现。在遍历过程中,检查每个节点的子节点数量,如果一个节点有且只有两个子节点,那么计数器加1。 在实际操作中,我们可能需要编写代码...

    关于数据结构树和二叉树的习题

    6.设森林 F 对应的二叉树为 B,它有 m 个结点,B 的根为 p,p 的右子树结点个数为 n,森林 F 中第一棵树的结点个数是( )。 在这里,我们可以根据森林 F 的定义,得到第一棵树的结点个数为 m-n。 7.树是结点...

    c 数据结构课程设计 通过先序遍历求二叉树各节点的度数

    二叉树可以为空,或者由一个根节点以及两棵(可能为空)分别称为左子树和右子树的二叉树组成。 节点的度是节点子树的数量,即一个节点的子节点个数。在二叉树中,节点的度可以是0(叶节点,没有子节点),1(只有一...

    第6章树和二叉树习题.pdf

    只有一个结点的二叉树的度为0;二叉树的度为2;二叉树的左右子树可任意交换;深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树。 5. 森林和二叉树: 设森林F对应的二叉树为B,它有m个结点,B的根为p,p...

    数据结构之二叉树【很好】

    3. 在任意一棵二叉树中,度数为 0 的结点(即叶子结点)总比度为 2 的结点多一个。 4. 具有 n 个结点的二叉树,其深度至少为 ⌈log2(n+1)⌉,其中 ⌈x⌉ 表示取 x 的整数部分。 满二叉树是除最后一层外,每一层上的...

    数据结构课程设计:二叉树的存储和遍历、排序

    二叉链表的结点形式如下:data 域:称为数据域,用于存储二叉树结点中的数据元素,lchild 域:称为左孩子指针域,用于存放指向本结点左孩子的指针(左指针),rchild 域:称为右孩子指针域,用于存放指向本结点右...

    二叉树面试题 树和二叉树总结.doc

    树是一种数据结构,由一个根节点和零个或多个子树组成。二叉树是一种特殊的树,其中每个节点最多有两个子节点。树和二叉树都是计算机科学中常用的数据结构。 二、树和二叉树的性质 树和二叉树都有其特定的性质,...

    电大数据结构-选择题.docx

    8. **图的性质**:在一个无向图中,所有顶点的度数之和等于边数的2倍,这是因为每条边连接两个顶点,所以每条边对度数的贡献是2。 9. **链队列操作**:链队列的删除操作是将队头指针f指向下一个节点;插入操作是将...

    (山东科技大学)PTA数据结构答案与解析

    10. 度为特定值的结点数与树的形态:对于一个给定度数的结点数,可以推算出树中叶子结点的个数。例如,一个四叉树中度为2的结点数为2,度为3的结点数为3,度为4的结点数为4,可以通过建立方程组来求解叶子结点的数量...

    二叉树的性质.pdf

    这个性质可以从二叉树结点度数的总和来证明。二叉树中所有结点的度数之和等于0度结点数、1度结点数和2度结点数的和,即n=no+n1+n2。同时,从子结点的角度看,1度结点贡献了n1个子结点,2度结点贡献了2n2个子结点,...

    二叉树习题课的PPT

    完全二叉树中,除了最后一个层次,其他层的结点度数只能是2或0,最后一个层次的结点度数可以是2、1或0。 9. **二叉树的深度**: - 二叉树的最大深度由结点数n决定,最深的树形状是一条链,深度为n-1。最小深度是1...

    数据结构有关数和二叉树,树的遍历以及线索化,Huffman树及其应用课件

    2. 从优先队列中取出两个最小频率的结点,并将它们合并成一个新的内部结点,新结点的频率为其两个子结点的频率之和。 3. 将新结点重新加入优先队列。 4. 重复步骤2和步骤3,直到优先队列中只剩下一个结点,这个结点...

    解决二叉树的编程问题(共25张PPT).pptx

    * 性质5:对于具有n个结点的完全二叉树,如果按照从上至下和从左到右的顺序对二叉树中的所有结点从1开始顺序编号,则对于任意的序号为i的结点,有:(1)如果i&gt;1,则序号为i的结点的双亲结点的序号为i/2(“/”表示...

    数据结构 树和二叉树ppt教程

    在提供的代码中,定义了一个二叉树节点结构体`BiTNode`,包含数据域和指向左右子节点的指针。同时,定义了顺序栈和循环队列的数据类型,用于处理二叉树节点,表明在实际编程中,这些数据结构和算法是处理树问题的...

    python二叉树的基础知识.docx

    1、二叉树结点的实现:以 class 类创建树的单个结点,节点中应包含当前节点的值、左节点指针、右节点指针 2、二叉树的创建:空的二叉树:用队列操作来实现二叉树;创建二叉搜索树 3、二叉的遍历: 递归算法: ...

    什么是二叉树 二叉树的定义

    1. 二叉树是由一个或多个结点组成的有限集合,其中必有一个特定的称为根(ROOT)的结点。 2. 剩下的结点被分成 n&gt;=0 个互不相交的集合 T1、T2、......Tn,而且,这些集合的每一个又都是树。 3. 树 T1、T2、......Tn 被...

    数据结构(C语言版) 第五章 树与二叉树 知识梳理 + 作业习题详解1

    首先,树被定义为一个有限集合,其中包含一个特殊的根节点以及可能的子树集合。每个子树本身也是一个树,这种定义具有递归性。在树的结构中,除了根节点,其他节点都有且仅有一个父节点,而节点可以有零个或多个子...

    数据结构C语言版二叉树及其查找结构

    二叉树也是递归定义的,其结点有左右子树之分,逻辑上二叉树有五种基本形态:空二叉树、只有一个根结点的二叉树、右子树为空的二叉树、左子树为空的二叉树和完全二叉树。 二叉树的性质 二叉树有许多重要的性质,如...

    数据结构实验

    三角矩阵中的重复元素c可共享一个存储空间,其余的元素正好有n×(n+1)/2个,因此,三角矩阵可压缩到向量Sa[0……n×(n+1)/2]中,其中c存放在向量的最后一个分量中。用向量Sa[0……n×(n+1)/2]压缩存储下三角矩阵,...

    第7章-树和二叉树第2讲-二叉树的概念.pptx

    * 一个结点的度数至多为 2。 * 左子树和右子树有左右之分,且次序不能颠倒。 二叉树的基本特征: * 每个结点最多只有两棵子树(不存在度大于 2 的结点) * 左子树和右子树有左右之分,且次序不能颠倒。 二叉树的 ...

Global site tag (gtag.js) - Google Analytics