求出一个排序二叉树中结点度数为一的结点个数
来源:互联网 发布:mac sleep 快捷键 编辑:程序博客网 时间:2024/04/26 05:35
#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);};
}
- 求出一个排序二叉树中结点度数为一的结点个数
- 删除二叉树中的度数为1的所有结点
- 求二叉树中值为x的结点的个数
- 在含有父结点指针的二叉树中找到一个结点的后继结点
- 求二叉树中所有结点的个数
- N结点二叉树中M个结点的连通子图个数
- N结点二叉树中M个结点的连通子图个数
- 计算二叉树的结点个数
- 计算二叉树的结点个数
- java 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
- 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
- 20.输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
- 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径
- 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
- 【剑指offer]输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
- 二叉树中查找值为x的结点,打印x结点的全部祖先
- 剑指offer_输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径
- 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径(剑指offer)
- 今日空气凉爽
- 查找二叉排序树中最大的键值(c代码)
- 用单循环链表存储一个环上的数据,并计算任意两个相邻元素之差是否超过2
- 朋友们都走了!
- asp.net利用js进行form验证表单
- 求出一个排序二叉树中结点度数为一的结点个数
- JSP用连接池连数据库的问题
- DUP 2.09
- DDB与DIB的区别(转载)
- “飞虎”的由来
- Qt中颜色相关知识
- 要开始学JAVA了,郁闷中。。。
- An Introduction to .NET(非原创---外教讲义)
- 菜鸟模仿duwamish开发时常见的错误