数据结构算法—非递归算法求二叉树的叶子结点(C语言)
数据结构算法—非递归算法求二叉树的叶子结点(C语言)
学过数据结构中 队列和栈的同学,应该都明白: 使用队列和栈,可以将递归算法转换成非递归算法
在递归算法中,需要重复调用函数时,在非递归算法中,就需要入栈,进入下一层。
在递归算法中,返回调用函数的结果时,在非递归算法中,就需要出栈,返回到上一层
#include<stdio.h>
#include<malloc.h>
struct node{char info;struct node *llink,*rlink;
};
typedef struct node NODE;
NODE *creat(){char x;NODE *p;scanf("%c",&x);printf("%c",x);if(x!='.'){//测试输入 ABD..EH...CF.I..G.. . 表示该结点无子树 也就是 返回上一层递归 p=(NODE *)malloc(sizeof(NODE));p->info=x;p->llink=creat();p->rlink=creat();}elsep=NULL;return p;
}
int Countleaf(NODE *bt,int count){int top=-1;NODE s[100];//创建一个栈 while(bt!=NULL||top!=-1){//当前结点 或者 栈 不为空 需要继续遍历 条件不可以反 while(bt!=NULL){ //当前根节点不为空 if(bt->llink==NULL&&bt->rlink==NULL) //判断左右子树是否为空 count++;s[++top] = *bt;//根节点有左右子树,入栈 bt = bt->llink;// 遍历根节点的 左子树 }if(top!=-1){//判断栈是否为空 bt = &s[top--];//根节点出栈 取地址& bt = bt->rlink;//遍历右子树 }}return count;
}
int main(){NODE *T;int count = 0;printf("PLease input a tree:\n");T=creat();printf("\n");count = Countleaf(T,count);printf("非递归算法-->二叉树的叶子结点数为:%d",count);printf("\n");
}
运行结果:
PLease input a tree:
ABD..EH...CF.I..G..
ABD..EH...CF.I..G..
非递归算法-->二叉树的叶子结点数为:4--------------------------------
Process exited after 1.394 seconds with return value 0
请按任意键继续. . .
数据结构算法—非递归算法求二叉树的叶子结点(C语言)相关推荐
- Java创建二叉树,并使用递归算法求二叉树中叶子结点的数目
问题描述 创建二叉树,并使用递归算法求二叉树中叶子结点的数目 输入 输入一个用'.'来标明空子树的先根遍历序列,如ABD-EH-CF.I-G- 输出 叶子结点的个数 存储结构 二叉树 算法的基本思想 ...
- 数据结构用递归算法计算二叉树中叶子结点数目的思想c语言程序,编写递归算法计算二叉树中叶子结点的数目。.doc...
编写递归算法计算二叉树中叶子结点的数目. 学院名称专业班级实验成绩学生姓名学号实验日期课程名称数据结构实验题目2 树一.实验目的与要求 Cfree 三.实验内容和原理 [问题描述] [输入] &quo ...
- 树与二叉树——递归算法、非递归算法求二叉树的深度
二叉树的结构: typedef struct BTNode {ElemType data;struct BTNode *lchild, *rchild; } BTNode; 递归算法求二叉树的深度de ...
- 31行代码AC——PTA 求二叉树的叶子结点个数 (20分)——解题报告
励志用尽量少的代码做高效的表达. 以二叉链表作为二叉树的存储结构,求二叉树的叶子结点个数. 输入格式: 输入二叉树的先序序列. 提示:一棵二叉树的先序序列是一个字符串,若字符是'#',表示该二叉树是空 ...
- 求二叉树的叶子结点个数
7-5 求二叉树的叶子结点个数 (20 分) 以二叉链表作为二叉树的存储结构,求二叉树的叶子结点个数. 输入格式: 输入二叉树的先序序列. 提示:一棵二叉树的先序序列是一个字符串,若字符是'#',表示 ...
- C++数据结构与算法—用递归方法求二叉树的叶子结点数
用递归方法写一个算法,求二叉树的叶子结点数int leafnum(BTREE T). 要求: 1.定义二叉树的抽象数据类型和型BTREE,并定义基本操作. 2.编写函数1eafnum(BTREE T, ...
- 求二叉树的叶子结点个数(C语言)
输入格式: 输入二叉树的先序序列. 提示:一棵二叉树的先序序列是一个字符串,若字符是'#',表示该二叉树是空树,否则该字符是相应结点的数据元素. 输出格式: 输出有两行: 第一行是二叉树的中序遍历序列 ...
- c语言求树上节点的双亲,用非递归算法求二叉树叶子结点的c语言代码怎样写?...
递归算法:是一种直接或者间接地调用自身的算法.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解. 递归算法的特点 递归过程一般通过函数或子过程来实现. 递归 ...
- 求二叉树中叶子结点的个数
#include<iostream> #define N 63using namespace std;char str[] = "ab#d##c#e##"; int i ...
- 二叉树的进阶操作---(求二叉树中所有结点个数,求叶子结点个数,求第k层结点个数;在二叉树中查找某一结点;层序遍历;判断是否为完全二叉树)
typedef struct TreeNode {struct TreeNode *left;struct TreeNode *right;char val; }TreeNode;typedef st ...
最新文章
- 快速记忆python函数-python入门(误)速记
- PHP 一键安装扩展的程序-(Windows 系统)
- 剑指offer九:变态跳台阶
- Linux下网络流量实时监控工具 大全
- 乾颐堂安德网工认证1000问(持续更新)
- WebOS + WebIM
- 总结windows下堆溢出的三种利用方式
- python中plot不能显示标签_python 2: 解决python中的plot函数的图例legend不能显示中文问题...
- JS动态呈现还可以输入字数
- 第二章 关键数据结构
- the browsermob-proxy server process failed to start
- MATLAB——DEMATEL代码(转载)
- Win10桌面壁纸、锁屏壁纸保存位置
- Gnuplot 绘图
- Collections.sort对List排序的两种方法
- ESXI提示 ramdisk“tmp”已满的解决方案
- Wifi 认证,关联,四次握手(WPA/WPA2/WPA3-SAE)
- contenteditable H5聊天室发送表情
- 阿里云国际版账户收到账号风险通知,怎么办?
- 休学证明格式【休学申请书标准通用】