二叉树的深度和分支节点数
来源:互联网 发布:chrome ubuntu 16.04 编辑:程序博客网 时间:2024/05/24 06:47
点击(此处)折叠或打开
- /*
- *二叉树采用二叉链表结构表示。设计并实现如下算法:
- *求一棵二叉树的深度和双分支结点的个数。
- */
- #include <stdio.h>
- #include <stdlib.h>
- #define ERROR 0
- #define OK 1
- #define OVERFLOW 0
- #define STACK_INIT_SIZE 100
- #define STACKINCREMENT 100
- typedef char TElemType;
- typedef struct BiTNode {
- TElemType data;
- struct BiTNode *lchild, *rchild;
- }BiTNode, *BiTree;
- typedef BiTree ElemType;
- typedef struct {
- ElemType *base;
- ElemType *top;
- int stacksize;
- }SqStack;
- int InitStack (SqStack *S)
- {
- S->base=(ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
- if (!S->base)
- exit (OVERFLOW);
- S->top=S->base;
- S->stacksize=STACK_INIT_SIZE;
- return OK;
- }
- int StackEmpty (SqStack S)
- {
- if (S.base==S.top)
- return 1;
- else
- return 0;
- }
- int Push (SqStack *S, ElemType e)
- {
- if (S->top - S->base >= S->stacksize)
- {
- S->base=(ElemType *)realloc(S->base,
- (S->stacksize + STACKINCREMENT)* sizeof(ElemType));
- if (!S->base)
- exit (OVERFLOW);
- S->top=S->base+S->stacksize;
- S->stacksize+=STACKINCREMENT;
- }
- *S->top++ = e;
- return OK;
- }
- int Pop(SqStack *S,ElemType *e)
- {
- if (S->top==S->base)
- return ERROR;
- *e=*(--S->top);
- return OK;
- }
- void CreateBiTree (BiTree *T)
- {
- TElemType temp;
- scanf ("%c", &temp);
- if (temp==' ')
- {
- *T=NULL;
- }
- else
- {
- (*T)=(BiTree)malloc(sizeof(BiTNode));
- if (!(*T))
- exit (1);
- CreateBiTree (&((*T)->lchild));
- CreateBiTree (&((*T)->rchild));
- (*T)->data=temp;
- }
- }
- void Traverse (BiTree T)
- {
- BiTree P;
- SqStack S;
- InitStack (&S);
- P=T;
- while (P||!StackEmpty(S))
- {
- if (P)
- {
- printf ("%c", P->data);
- Push(&S,P);
- P=P->lchild;
- }
- else
- {
- Pop(&S,&P);
- P=P->rchild;
- }
- }
- }
- int ComputeDeep (BiTree root)
- {
- int i=0, j=0;
- if (root==NULL)
- {
- return 0;
- }
- else
- {
- i=ComputeDeep (root->lchild);
- j=ComputeDeep (root->rchild);
- return (i>j?i:j)+1;
- }
- }
- int ComputeNode (BiTree root)
- {
- int i=0,j=0;
- if (root==NULL)
- {
- return i+j;
- }
- else
- {
- i=ComputeNode (root->lchild);
- j=ComputeNode (root->rchild);
- if (root->lchild&&root->rchild)
- return i+j+1;
- else
- return i+j;
- }
- }
- int main ()
- {
- BiTree T;
- int deep;
- int node;
- CreateBiTree (&T);
- Traverse (T);
- printf ("\n");
- deep=ComputeDeep (T);
- printf ("deep = %d\n", deep);
- node=ComputeNode (T);
- printf ("node = %d\n", node);
- printf ("end");
- getch ();
- return 0;
- }
0
上一篇:二叉树
下一篇:有向图的深度和广度搜索
相关热门文章
- 移动P2P资源算法的一些理论基...
- 软件工程 工具之二—— PowerD...
- 杂记(1)
- 位置引起的错误
- 云服务器整体服务结构...
- test123
- 编写安全代码——小心有符号数...
- 使用openssl api进行加密解密...
- 一段自己打印自己的c程序...
- sql relay的c++接口
- 怎么样找出BIND中查询并发量多...
- 可有人在实际的openstack生产...
- 如下makefile如何编写
- sqlldr 参数配置
- 讨论一下各位所管理的mysql生...
给主人留下些什么吧!~~
评论热议
- 二叉树的深度和分支节点数
- 二叉树的深度和叶子节点数
- 二叉树的节点数和二叉树的叶子节点书和二叉树的深度
- 已知二叉树的节点数,求树的深度
- 二叉树的遍历与深度和节点数的计算代码实现
- 二叉树的创建、遍历、深度、叶子节点数
- Java学习笔记之二叉树的节点数、深度
- 二叉树的字符串创建和遍历,求深度,叶子节点数
- 二叉树的高度和节点数
- 二叉树-节点数和边数的关系
- 二叉树的节点个数和深度(非递归)
- 二叉树中包括高度,深度,节点数,宽度,最大值等的递归和非递归方法
- 二叉树求深度和宽度,叶子节点数,总结点数
- 二叉树的先序建立、遍历、镜像、节点数、深度的具体代码实现
- 求解二叉树所有节点的深度
- 求二叉树指定节点的深度
- 二叉树的创建,遍历,叶节点数,总结点数,深度
- 二叉数的建立和求树的深度
- 栈的应用
- 迷宫问题
- Exercises 4.2 E2 (a)
- 稀疏矩阵的存储与快速转置
- 二叉树
- 二叉树的深度和分支节点数
- 有向图的深度和广度搜索
- 堆排序和快速排序
- ADO.net实现数据查询表的分页
- 检索进程所使用的所有模块的列表
- jQuery语法
- silverlight treeview 中添加复选框
- 关于 jsp servlet 将Excel表格内容写进数据库,将数据库导出到Excel中。(一)
- 关于 jsp servlet 将Excel表格内容写进数据库,将数据库导出到Excel中。(二)
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
羽毛球规则
高尔夫球事件
腕力球怎么玩
球的拼音
万达海洋球
海洋球图片
海洋球批发
生物球
球的拼音怎么写
毬
乒乓球体育
泡泡玩具
阴道球
巴基球
开心球
球釜电饭锅
咪咪球
润唇球
乒乓球抽球技巧
球天下
波速球
乒乓球拉球技巧
痔疮球
羊球
脱硫球
球图片
白巧克力球
宠物球
5wled球泡
15w球泡
崖柏保健球
8球台球桌价格
瓜子球
乒乓球旋球技巧
乒乓球学校
落叶球
仙球大战
一仙难球
仙球大战超清免费观看
仙球大战免费完整版
球体素描