树c语言基本算法(c++抽象语法树)

本篇文章给大家谈谈树c语言基本算法,以及c++抽象语法树对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

1、C语言中基本的几种算法有哪些越多越好!就像打擂台算法’冒泡排序法等等…2、用C语言编程实现二叉树的中序遍历算法3、二叉树的基本操作 C语言版的4、C语言二叉树递归算法怎么做?5、用C语言的递归算法求树的叶子数

C语言中基本的几种算法有哪些越多越好!就像打擂台算法’冒泡排序法等等…

排序算法

冒泡排序

选择排序

快速排序

高精度运算

存储方法

加法运算

减法运算

乘法运算

扩大进制数

习题与练习

搜索算法

枚举算法

深度优先搜索

广度优先搜索

8数码问题

n皇后问题

搜索算法习题

枚举法习题

聪明的打字员

量水问题

染色问题

跳马问题

算24点

图论算法

最小生成树算法(Prim算法)

单源最短路径算法(Dijkstra算法)

任意结点最短路径算法(Floyd算法)

求有向带权图的所有环

Bellman-Ford算法

计算图的连通性

计算最佳连通分支

计算拓扑序列

图论算法习题

网络建设问题

最短变换问题

挖地雷

乌托邦城市

乌托邦交通中心

动态规划

最短路径问题

动态规划概念

骑士游历问题

最长递增子序列

合唱队形

石子合并问题

能量项链

0/1背包问题

开心的金明

金明的预算方案

加分二叉树

字串编辑距离

花瓶插花

凸多边形三角划分

快餐店

树c语言基本算法(c++抽象语法树)

用C语言编程实现二叉树的中序遍历算法

#includestdio.h

#includestdlib.h

struct BiTNode *stack[100];

struct BiTNode//定义结构体

{

char data;

struct BiTNode *lchild,*rchild;

};

void later(struct BiTNode *p) //前序创建树

{

char ch;

scanf(“%c”,ch);

if(ch==’ ‘)

p=NULL;

else

{

p=(struct BiTNode *)malloc(sizeof(struct BiTNode));

p-data=ch;

later(p-lchild);

later(p-rchild);

}

}

void print(struct BiTNode *p) //前序遍历(输出二叉树)

{

int i=-1;

while(1)

{

while(p!=NULL)

{

stack[++i]=p-rchild;/*printf(“ok?\n”);*/

printf(“%c”,p-data);

p=p-lchild;

}

if(i!=-1)

{

p=stack[i];

i–;

}

else

return;

}

}

void main()//主函数

{

struct BiTNode *p,*t;

later(p);

print(p);

}

二叉树的基本操作 C语言版的

#include iostream.h

typedef struct BiTNode

{

char data;

int bit;

struct BiTNode *lchild,*rchild,*parent;

}BiTNode;

void InitBT(BiTNode *t)//1、初始化,不带头结点

{

t=NULL;

}

/*void InitBT(BiTNode *t)//初始化,带头结点

{

t=new BiTNode;

t-lchild=t-rchild=t-parent=NULL;

}*/

int EmptyBT(BiTNode *t)//判断队空

{

if(t==0)

return 1;

else

return 0;

}

BiTNode *creatBT(BiTNode *t,int b)//2、创建二叉树

{

BiTNode *p;

char ch;

cinch;

if(ch==’#’)return 0;

else

{

p=new BiTNode;

p-data=ch;

p-parent=t;

p-bit=b;

t=p;

t-lchild=creatBT(t,0);

t-rchild=creatBT(t,1);

}

return t;

}

void preorder(BiTNode *t)//3、先序遍历

{

if(!EmptyBT(t))

{

coutt-data;

preorder(t-lchild);

preorder(t-rchild);

}

}

void inorder(BiTNode *t)//中序遍历

{

if(!EmptyBT(t))

{

inorder(t-lchild);

coutt-data;

inorder(t-rchild);

}

}

void postorder(BiTNode *t)//后序遍历

{

if(!EmptyBT(t))

{

postorder(t-lchild);

postorder(t-rchild);

coutt-data;

}

}

void coutBT(BiTNode *t,int m,int n,int i)//4、计算二叉树中叶子结点、度为2的结点和度为1的结点的个数

{

if(!EmptyBT(t))

{

if((t-lchild==0) (t-rchild==0))

m++;//叶子结点

else if((t-lchild!=0) (t-rchild!=0))

i++;//度为2的结点

else

n++;//度为1的结点

coutBT(t-lchild,m,n,i);

coutBT(t-rchild,m,n,i);

}

}

void coutNode(BiTNode *t,int k)//5、求二叉树中结点个数

{

if(!EmptyBT(t))

{

k++;

coutNode(t-lchild,k);

coutNode(t-rchild,k);

}

}

int BTdepth(BiTNode *t)//6、求二叉树的深度

{

int i,j;

if(EmptyBT(t))

return 0;

else

{

i=BTdepth(t-lchild);

j=BTdepth(t-rchild);

return (ij?i:j)+1;

}

}

int Xdepth(BiTNode *t,char x)//7、查找x的层数

{

int num1,num2,n;

if(t==NULL)

return 0;

else{

if(t-data==x)

return 1;

num1=Xdepth(t-lchild,x);

num2=Xdepth(t-rchild,x);

n=num1+num2;

if(num1!=0||num2!=0)

n++;

return n;

}

}

static int flag;

void SearchChild(BiTNode *t,int k)//8、查找第k个结点的左右孩子

{

if(!EmptyBT(t))

{

if(k==0)

{

cout”位置不能为0!”endl;

return;

}

else

{

flag++;

if(flag==k)

{

if(t-lchild==0)

cout”无左孩子! “;

else

cout”左孩子为:”(t-lchild-data)” “;

if(t-rchild==0)

cout”无右孩子!”endl;

else

cout”右孩子为:”(t-rchild-data)endl;

}

else

{

SearchChild(t-lchild,k);

SearchChild(t-rchild,k);

}

}

}

}

int Xancestor(BiTNode *t,char x)//9、查找x结点祖先

{

int n,num1,num2;

if(t==NULL)

return 0;

else

{

if(t-data==x)

return 1;

num1=Xancestor(t-lchild,x);

num2=Xancestor(t-rchild,x);

n=num1+num2;

if(n!=0)

{

n++;

coutt-data” “endl;

}

}

}

void BTNodePath(BiTNode *t)//10、输出所有叶子结点路径

{

if(!EmptyBT(t))

{

if((t-lchild==0) (t-rchild==0))

{

coutt-data”的路径为:”;

for(BiTNode *p=t;p!=0;p=p-parent)

coutp-data;

coutendl;

}

else

{

BTNodePath(t-lchild);

BTNodePath(t-rchild);

}

}

}

void BTNodebit(BiTNode *t)//11、输出所有叶子结点编码

{

if(!EmptyBT(t))

{

if((t-lchild==0) (t-rchild==0))

{

coutt-data”的编码为:”;

for(BiTNode *p=t;p-parent!=0;p=p-parent)

coutp-bit;

coutendl;

}

else

{

BTNodebit(t-lchild);

BTNodebit(t-rchild);

}

}

}

void main()

{

BiTNode *t;

int m,n,i,d,q,k;

char x;

cout”1、初始化…”endl;

InitBT(t);

cout”2、创建二叉树…”endl;

t=creatBT(t,0);

cout”3.1、先序遍历…”endl;

preorder(t);

coutendl;

cout”3.2、中序遍历…”endl;

inorder(t);

coutendl;

cout”3.3、后序遍历…”endl;

postorder(t);

coutendl;

m=n=i=0;

cout”4、计算叶子结点,度为1的结点和度为2的结点的个数…”endl;

coutBT(t,m,n,i);

cout”叶子结点个数为:”mendl;

cout”度为1的结点个数为:”nendl;

cout”度为2的结点个数为:”iendl;

q=0;

cout”5、计算结点个数…”endl;

coutNode(t,q);

cout”结点个数为:”qendl;

d=0;

cout”6、计算深度…”endl;

d=BTdepth(t);

cout”深度为:”dendl;

cout”7、求x的层数…”endl;

cout”输入x:”;

cinx;

if(Xdepth(t,x)==0)

cout”x不存在!”endl;

else

coutXdepth(t,x)endl;

cout”8、输入要查找孩子的结点在先序遍历中的位置k(不等于0):”;

cink;

SearchChild(t,k);

if(kflag)

cout”位置超出长度!”endl;

cout”9、查询结点的所有祖先,请输入结点x:”;

cinx;

int num;

num=Xancestor(t,x);

if(num==0)

cout”结点不存在!”endl;

if(num==1)

cout”根结点无祖先!”endl;

cout”10、输出所有叶子结点路径(叶→根):”endl;

BTNodePath(t);

cout”11、输出所有叶子结点编码(叶→根):”endl;

BTNodebit(t);

}

C语言二叉树递归算法怎么做?

#include stdio.h

#include string.h

struct treenode{

    int value;

    treenode* left;

    treenode* right;

};

typedef treenode* BiTree;

void visit(treenode* node)

{

    printf(“%2d “, node-value);

}

//    结点总数 

int node(BiTree T)

{

    if( !T ){

        return 0;

    }

    return node(T-left) + node(T-right) + 1;

}

//    前序 

void preOrder(BiTree T)

{

    if( T ){

        visit(T);

        preOrder(T-left);

        preOrder(T-right);    

    }

}

//    中序

void inOrder(BiTree T)

{

    if( T ){

        inOrder(T-left);

        visit(T);

        inOrder(T-right);    

    }    

//    后序

void postOrder(BiTree T)

{

    if( T ){

        postOrder(T-left);

        postOrder(T-right);    

        visit(T);

    }    

//    叶子节点数

int leafnode(BiTree T)

{

    if( T ){

        if( !T-left  !T-right )

            return 1;

        else

            leafnode(T-left) + leafnode(T-right);    

    }else{

        return 0;

    }

int height(BiTree T)

{

    if( T ){

        int lh = height(T-left);

        int rh = height(T-right);

        return (lhrh ? lh:rh) + 1;

    }else{

        return 0;

    }

}

int main()

{

    

    return 0;

}

用C语言的递归算法求树的叶子数

typedef

struct

node

{

struct

node

*left;

struct

node

*right;

}Node;

int

Leaf(Node*

tree)

{

if(tree==NULL)

//终止条件1,tree指向NULL时返回0

{

return

0;

}

else

if(tree-left==NULL

tree-right==NULL)

//终止条件2

两个节点都为空时,找到叶子了,返回

1

{

return

1;

}

else

{

return

Leaf(tree-left)+Leaf(tree-right);

//递归调用

}

}

//主函数不用写了吧,创建一棵树以及调用函数,自己写

关于树c语言基本算法和c++抽象语法树的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年4月2日 03:11:47
下一篇 2024年4月2日 03:20:10

相关推荐

  • javasocket编程,Java socket编程中,禁用nagle算法的参数

    Java进行并发多连接socket编程 1、Java可利用ServerSocket类对外部客户端提供多个socket接口。基本的做法是先创建一个ServerSocket实例,并绑定一个指定的端口,然后在这个实例上调用accept()方法等待客户端的连接请求。 2、Socket socket=server.accept(0;Thread handleThrea…

    2024年5月23日
    4600
  • dh算法c语言实现,c语言算法有哪些

    云计算时代安全综述-秘钥交换(上) 1、在加密密钥管理方面,应采用集中化的用户密钥管理与分发机制,实现对用户信息存储的高效安全管理与维护。 2、在云计算中,确保私有数据安全性的最佳方法之一就是对传输的数据和存储的数据进行加密处理。当谈及云计算服务时,仍然存在一些加密方面的潜在问题。 3、第七大安全威胁是云服务滥用,比如坏人利用云服务破解普通计算机很难破解的加…

    2024年5月23日
    4200
  • c语言算法分析是什么,c语言算法的作用

    C语言算法详解 1、C语言大牛雅荐的七大经典排序算法 冒泡排序 比较相邻的元素。 2、c语言中的算法是指:一系列解决问题的清晰指令,用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。通俗说就是解决问题的方法和步骤。 3、) 贪婪算法 贪婪算法可以获取到问题的局部最优解,不一定能获取到全局最优解,同时获取最优解的…

    2024年5月23日
    3500
  • c语言实现优先级调度算法,c语言运算符表

    有c语言模拟调度算法吗? 1、调度算法的实施过程如下所述:(1)应设置多个就绪队列,并为各个队列赋予不同的优先级。(2)当一个新进程进入内存后,首先将它放入第一队列的末尾,按FCFS的原则排队等待调度。 2、实验内容 设计一个时间片轮转调度算法实现处理机调度的程序。 3、操作系统进程调度算法模拟 使用链表数据结构,用C语言写一个用优先级算法的进程调度,进程每…

    2024年5月23日
    4300
  • javatea算法,java算法是什么意思

    TEA加密算法的应用 1、交织算法消息被分为多个加密单元,每一个加密单元都是8字节,使用TEA进行加密,加密结果与下一个加密单元做异或运算后再作为待加密的明文。 2、tea算法在安全学领域,TEA(Tiny Encryption Algorithm)是一种分组加密算法,它的实现非常简单,通常只需要很精短的几行代码。TEA 算法最初是由剑桥计算机实验室的 Da…

    2024年5月23日
    4100
  • java常考算法,java算法基础题

    大学java中都学过哪些经典算法?请学过的朋友解答下 Java SE部分 初级语法,面向对象,异常,IO流,多线程,Java Swing,JDBC,泛型,注解,反射等。数据库部分,基础的sql语句,sql语句调优,索引,数据库引擎,存储过程,触发器,事务等。 互联网行业目前还是最热门的行业之一,许多想入行互联网的人都会选择Java学习,发展前景非常好,普通人…

    2024年5月23日
    3900
  • 正态分布java算法,正态分布moment generating function

    正态分布的计算 正态分布可加性公式是:X+Y~N(3,8)。相互立的正态变量之线性组合服从正态分布。 加法:如果有两个正态分布X和Y,其均值分别为μ和μ,方差分别为σ和σ。 正态分布密度函数公式:f(x)=exp{-(x-μ)/2σ}/[√(2π)σ]。计算时,先算出平均值和标准差μ、σ,代入正态分布密度函数表达式,给定x值,即可算出f值。 正态分布的随机数…

    2024年5月23日
    4800
  • linux抽象成文件,linux做成镜像文件

    以下哪些是linux系统的优点 1、Linux的优势:安全:在Linux系统下,除非进入超级用户状态,否则连软件都安装不上,更别提病毒、恶意软件的自动安装了,Linux系统的核心代码是开源的,也就是对用户完全透明,意味着Linux系统漏洞会更少。 2、相对于其他操作系统,一个主要优点是自定义。您可以自定义任何功能,根据需要添加或删除任何功能,因为它是开源操作…

    2024年5月22日
    3700
  • 八大排序希尔排序java,希尔排序算法代码c

    java中排序方法有哪些 1、最主要的是冒泡排序、选择排序、插入排序以及快速排序冒泡排序 冒泡排序是一个比较简单的排序方法。在待排序的数列基本有序的情况下排序速度较快。 2、排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)快速排序的伪代码。 3、将数字从…

    2024年5月22日
    4300
  • javajvm堆栈,java实现堆栈算法

    如何理解Java虚拟机栈? 1、在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。 2、Java虚拟机是一种抽象化的计算机,作用是可以在多种平台上不加修改地运行。Java虚拟机通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。 3、Java虚拟机是栈式的,它不定义或…

    2024年5月22日
    3800

发表回复

登录后才能评论



关注微信