当前位置:首页 » 编程语言 » c语言树叶结点怎么写
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言树叶结点怎么写

发布时间: 2022-10-02 20:15:13

c语言中怎样用递归遍历叶子节点,并打印出来

#include <stdio.h>
#include <stdlib.h>

typedef struct node{
char data;
struct node *left,*right;
} node;

void fout(node *root)/*输出叶结点*/
{
if (root)
{
if (!(root->left)&&!(root->right)) putchar(root->data);
fout(root->left);
fout(root->right);
}
}

node *ins(node *root,char ad)/*演示辅助函数,用于建立二树*/
{

if (root==NULL)
{
root=malloc(sizeof(node));
root->data=ad;
root->left=root->right=NULL;
}
else if (ad<root->data) root->left=ins(root->left,ad);
else if (ad>=root->data) root->right=ins(root->right,ad);

return root;
}

void FREE(node *root)/*演示辅助函数,用于释放空间*/
{
if (!(root->left)&&!(root->right)) free(root);
else
{
if (root->left) FREE(root->left);
if (root->right) FREE(root->right);
}
}
int main(void)
{

node *root=NULL;
char ch;
while ((ch=getchar())!='\n')/*输入一个以回车结束的字符串,用于建立二叉树*/
{
root=ins(root,ch);
}
fout(root);/*输出叶结点*/
FREE(root);/*删除二叉树*/
return 0;
}

㈡ C语言求树中的叶子结点数

有从上至下和从下至上两种方式可以统计树的节点数。
设叶子节点(度为0的节点)数为x:
从上至下时,度为n的节点有n个子节点,再加上根节点,总结点数量为1+4×1+3×2+2×3+1×4+0×n=21
从下至上时,节点数为度为0~4的所有节点数相加,总节点数量为1+2+3+4+n=10+n
所以有21=10+n,得n=11.

㈢ 数据结构创建一棵树的c语言代码怎么写

刚刚回答了一个类似的问题,以下代码供参考:
#include "stdio.h"
#include "stdlib.h"
#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef char TElemType;
typedef int Status;
typedef struct BiTNode { // 结点结构
TElemType data;
struct BiTNode *lchild, *rchild;
// 左右孩子指针
} BiTNode, *BiTree;

//以下是建立二叉树存储结构,空节点输入作为#结束标识
Status CreateBiTree(BiTree &T) {
//请将该算法补充完整,参见第6章课件算法或课本
char ch;
scanf("%c",&ch);
if(ch=='#') T=NULL;
else{
if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))
exit(OVERFLOW);
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return OK;

} // CreateBiTree
void Preorder(BiTree T)
{
if(T)
{
printf("%c",T->data);
Preorder(T->lchild);
Preorder(T->rchild);
}
}

void Inorder(BiTree T)
{ // 中序遍历二叉树
//请将该算法补充完整,参见第6章课件算法
if(T)
{
Inorder(T->lchild);
printf("%c",T->data);
Inorder(T->rchild);
}
}
void Postorder(BiTree T)
{ // 后序遍历二叉树
//请将该算法补充完整,参见第6章课件算法
if(T)
{
Postorder(T->lchild);
Postorder(T->rchild);
printf("%c",T->data);
}
}

//以下是求叶子结点数
void CountLeaf(BiTree T,int& count){
//请将该算法补充完整,参见第6章课件算法
if(T){
if((!T->lchild)&&(!T->rchild))
count++;
CountLeaf(T->lchild,count);
CountLeaf(T->rchild,count);
}
}

//以下是求二叉树的深度
int Depth(BiTree T ){
//请将该算法补充完整,参见第6章课件算法
int depthval,depthLeft,depthRight;
if(!T) depthval=0;
else{
depthLeft = Depth(T->lchild);
depthRight = Depth(T->rchild);
if(depthLeft>depthRight)depthval = 1+depthLeft;
else depthval = 1+depthRight;
}
return depthval;
}

void main(){
BiTree T;
int s=0,d;
printf("\n creat of the bitree:\n");
CreateBiTree(T);
printf("\n output result of Preorder:\n");
Preorder(T);
CountLeaf(T,s);
d=Depth(T);
printf("\n leaves=%d\n",s);
printf("\n depth=%d\n",d);
}

㈣ 怎么计算C语言的二叉树中的叶子节点数

结点的度是指,该结点的子树的个数,在二叉树中,不存在度大于2的结点。
计算公式:n0=n2+1
n0
是叶子节点的个数
n2
是度为2的结点的个数
n0=n2+1=5+1=6
故二叉树有5个度为2的结点,则该二叉树中的叶子结点数为6。
(4)c语言树叶结点怎么写扩展阅读
叶子结点是离散数学中的概念。一棵树当中没有子结点(即度为0)的结点称为叶子结点,简称“叶子”。
叶子是指度为0的结点,又称为终端结点。
叶子结点
就是度为0的结点
就是没有子结点的结点。
n0:度为0的结点数,n1:度为1的结点
n2:度为2的结点数。
N是总结点
在二叉树中:
n0=n2+1;
N=n0+n1+n2
参考资料:叶子结点_网络

㈤ 按先序遍历输出叶子结点的程序(可以用C++运行的C语言程序)

#include<stdlib.h>
#include<stdio.h>


typedefstructbitnode{
intdate;
structbitnode*lchild,*rchild;
}bitnode,*bitree;
intj=0;
//函数说明
bitree*createbitree(bitree*T);
intQtraversebitree(bitreeT);
intZtraversebitree(bitreeT);
intHtraversebitree(bitreeT);
intFtraversebitree(bitreeT);
/*******************主函数****************************/


main()
{
bitreeTree,*T;intk;
do
{
printf(" ╔-----------------------------------------------╗");//显示一个简易菜单
printf(" ┆先序创建----1先序遍历------2┆");
printf(" ┆中序遍历----3后序遍历------4┆");
printf(" ┆叶子个数---5退出程序------6┆");
printf(" ╚-----------------------------------------------╝ ");
printf("请输入所要进行的操作序号:");
scanf("%d",&k);//接受用户的选择
switch(k)//接受用户的函数
{case1:printf("左右子树为空时用0代替,用间隔符隔开: ");
T=createbitree(&Tree);
break;
case2:Qtraversebitree(*T);
break;
case3:Ztraversebitree(*T);
break;
case4:Htraversebitree(*T);
break;
case5:printf(" 叶子个数为:%d ",Ftraversebitree(*T));
break;
case6:break;
default:printf("错误选择!请重选 ");break;
}
}while(k!=6); //直到i被赋值为6
return0;


}
/*******************创建二叉树函数****************************/
bitree*createbitree(bitree*T)
{
charch;
scanf("%d",&ch);
if(ch==0)
(*T)=NULL;
else{
if(!((*T)=(bitnode*)malloc(sizeof(bitnode))))
exit(0);
(*T)->date=ch;//生成根节点
createbitree(&(*T)->lchild);
createbitree(&(*T)->rchild);
}
returnT;
}


/*******************先序遍历函数****************************/
Qtraversebitree(bitreeT)
{
if(T){printf("%d",T->date);
if(Qtraversebitree(T->lchild))
if(Qtraversebitree(T->rchild))return1;
return0;
}
elsereturn1;
}
/*******************中序遍历函数****************************/
Ztraversebitree(bitreeT)
{
if(T){if(Ztraversebitree(T->lchild))
printf("%d",T->date);
if(Ztraversebitree(T->rchild))return1;
return0;
}
elsereturn1;
}
/*******************后序遍历函数****************************/
Htraversebitree(bitreeT)
{
if(T){if(Htraversebitree(T->lchild))
if(Htraversebitree(T->rchild))
printf("%d",T->date);return1;
return0;
}
elsereturn1;
}


/******************返回叶子节点个数函数*************/
Ftraversebitree(bitreeT)
{
if(T){if(!((T->lchild)||(T->rchild)))j++;
if(Ftraversebitree(T->lchild))
if(Ftraversebitree(T->rchild))returnj;
returnj;
}
elsereturnj;
}

㈥ c语言 统计二叉树的叶节点个数,并输出每个叶节点到根结点的路径

int countTreeNode(TreeNode * root, Queue *queue)
{
if (root == NULL)
return 0;
queue->push(root);//入队
if (root->left == NULL && root->right == NULL)
{
queue->print();//打印队列中的元素
queue->pop();//出队
return 1;
}
int count = countTreeNode(root->left, queue) + countTreeNode(root->right,queue);
queue->pop();//出队
return count;
}

㈦ 如何用C语言画一片树叶(如果好在话给高分)

#include "math.h"
#include <graphics.h>
#include <stdlib.h>
#include <time.h>
void main(void)
{
int gdriver=DETECT,gmode ;
int ran_number ;
float a,b,c,d,e,f ;
float x,y,x_pre,y_pre ;
float disp_x,disp_y ;
initgraph(&gdriver,&gmode,"\\tc");
/* setfillstyle(SOLID_FILL,RED);*/
randomize();
setbkcolor(BLUE);
setcolor(14);
x=y=x_pre=y_pre=0 ;
ran_number=90 ;
while(kbhit()==0)
{
ran_number=random(100)+1 ;
if(ran_number==1)
{
a=0 ;
b=0 ;
c=0 ;
d=0.15 ;
e=0 ;
f=0 ;
}
else if(ran_number>1&&ran_number<=86)
{
a=0.87 ;
b=0.014 ;
c=-0.014 ;
d=0.87 ;
e=0 ;
f=1.6 ;
}
else if(ran_number>86&&ran_number<=93)
{
a=0.26 ;
b=0.472 ;
c=0.772 ;
d=0.34 ;
e=0 ;
f=1.6 ;
}
else
{
a=0.28 ;
b=0.867 ;
c=-0.478 ;
d=0.4 ;
e=0 ;
f=0.44 ;
}
x=a*x_pre*cos(b)-d*sin(c)*y_pre+e ;
y=c*x_pre*sin(b)+d*cos(c)*y_pre+f ;
x_pre=x ;
y_pre=y ;
disp_x=(x+5)*639/12 ;
disp_y=350-y*28 ;
putpixel((int)disp_x,(int)disp_y,GREEN);
}
getch();
getch();
closegraph();
}
十分买这个图形很便宜了,呵呵!

㈧ 已知二叉树的先序遍历序列和中序遍历序列,统计该二叉树中叶子结点的个数 用C语言怎么编写急急急在考试

int LeafNodes(BiTree T)

{ if(T==NULL) return 0;

else if((T->lchild==NULL)&&(T->rchild==NULL)) return 1;

else

{ numl=LeafNodes (T->lchild);

numr=LeafNodes (T->rchild);

return numr+numl;

}

或者:

public int getNumberOfLeavesByQueue(BinaryTreeNode root){

int count = 0; //叶子节点总数

LinkQueue<BinaryTreeNode> queue = new LinkQueue<>();

if(root != null){

queue.enQueue(root);

}

while (!queue.isEmpty()) {

BinaryTreeNode temp = (BinaryTreeNode) queue.deQueue();

//叶子节点:左孩子节点和右孩子节点都为NULL的节点

if(temp.getLeft() == null && temp.getRight() == null){

count++;

}else{

if(temp.getLeft() != null){

queue.enQueue(temp.getLeft());

}

if(temp.getRight() != null){

queue.enQueue(temp.getRight());

(8)c语言树叶结点怎么写扩展阅读:

根据访问结点操作发生位置命名:

① NLR:前序遍历(Preorder Traversal 亦称(先序遍历))

——访问根结点的操作发生在遍历其左右子树之前。

② LNR:中序遍历(Inorder Traversal)

——访问根结点的操作发生在遍历其左右子树之中(间)。

③ LRN:后序遍历(Postorder Traversal)

——访问根结点的操作发生在遍历其左右子树之后。

注意:

由于被访问的结点必是某子树的根,所以N(Node)、L(Left subtree)和R(Right subtree)又可解释为根、根的左子树和根的右子树。NLR、LNR和LRN分别又称为先根遍历、中根遍历和后根遍历。

㈨ C语言 求二叉树根节点到叶子节点的路径

它的算法思想应该是
1,以一指针指向该叶子结点并向上(父结点)找,把父节点入栈(方便输出路径)
2,把指针指向父节点,重复上面的过程,直到节点的父节点为空
3,依次出栈输出信息,路径就出来了
(注:此二叉树的节点应包括父指针,左右指针,数据域)

就这么多吧! 要学习程序,就得自己尝试写,写多了就会了

还有什么不懂的可以给我留言 !!

㈩ C语言二树叶子结点

这个画一下就知道了。

第一层 度为2的一个
第二层 2个
总计五个度为2 的,那么第三层就是2个度为2 的节点 另外两个为叶子节点。
第四层,4个叶子节点。
总计6个。
这个是不存在度为1 的情况。
事实上,度为1的节点个数,不影响叶子节点个数的。