‘壹’ c语言一道数据结构算法题,求大神解答,求二叉树的结点数量!
#include<bits/stdc++.h>
usingnamespacestd;
intdeg[233],tot[3],n,m;
intmain(){
scanf("%d",&n);
for(inti=1;i<n;i++){
intt1,t2;
scanf("%d%d",&t1,&t2);
deg[t1]++;deg[t2]++;
}
for(inti=1;i<=n;i++)
tot[deg[i]]++;
printf("%d%d%d ",tot[0],tot[1],tot[2]);
}
‘贰’ 求二叉树所有结点data之和.c语言或c++
看代码:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedefintdata_type;
typedefstructnode
{
structnode*lchild;
structnode*rchild;
data_typedata;
}BiTNode,*BiTree;
intsum(BiTreeroot)
{
if(root==NULL)
{
return0;
}
//二叉树所有结点data之和=根节点的data+左子树data之和+右子树data之和
returnroot->data+sum(root->lchild)+sum(root->rchild);
}
intmain()
{
BiTreeroot;
root=(BiTree)malloc(sizeof(BiTNode));
root->data=1;
root->lchild=(BiTree)malloc(sizeof(BiTNode));
root->lchild->lchild=root->lchild->rchild=NULL;
root->lchild->data=2;
root->rchild=(BiTree)malloc(sizeof(BiTNode));
root->rchild->lchild=root->rchild->rchild=NULL;
root->rchild->data=3;
/*上面的代码构建了一棵下面这样的二叉树
1
/
23
*/
printf("sum:%d ",sum(root));
return0;
}
‘叁’ 求二叉树每层节点的个数,用C语言实现
typedef struct biTreeNode {
struct biTreeNode * left;
struct biTreeNode * right;
void * data;
} bitree, bitreenode;
//queue是一个链式队列,因为不知道每一层会有多少个节点
//de_queue是出队列函数,返回可以设定为通用的void *,之后自己强转
//en_queue为入队函数
int count_node(queue * q)
{
bitreenode * node;
int count = 0;
int left = q -> count;
while (left --) {
node = (bitreenode *)de_queue(q);
count ++;
if (node -> left)
en_queue(q, node ->left);
if (node -> right)
en_queue(q, node ->right);
}
return count;
}
int print_tree_level_count(bitree * tree)
{
queue q;
int count;
int level = 1;
en_queue(&q, tree);
//count为队列q中的元素个数
while (q.count) {
printf("level %d: %d", level ++, count_node(&q));
}
}
int main(void)
{
bitree * tree;
//自己初始化tree
print_tree_level_count(tree);
return 0;
}
‘肆’ 求二叉树每层节点的个数,用C语言实现
Status
HierarchyBiTree(BiTree
T,
Status
(*Visit)(TElemType
e))
{
LinkQueue
*Q;
//
保存当前节点的左右孩子的队列
InitQueue(Q);
//
初始化队列
if
(T
==
NULL)
return
ERROR;
//树为空则返回
p
=
T;
//
临时保存树根T到指针p中
Visit(p->data);
//
访问根节点
if
(p->lchild)
EnQueue(Q,
p->lchild);
//
若存在左孩子,左孩子进队列
if
(p->rchild)
EnQueue(Q,
p->rchild);
//
若存在右孩子,右孩子进队列
while
(!QueueEmpty(Q))
{
//
若队列不空,则层序遍历
DeQueue(Q,
p);
//
出队列
Visit(p->data);
//
访问当前节点
if
(p->lchild)
EnQueue(Q,
p->lchild);
//
若存在左孩子,左孩子进队列
if
(p->rchild)
EnQueue(Q,
p->rchild);
//
若存在右孩子,右孩子进队列
}
DestroyQueue(Q);
//
释放队列空间
return
OK;
}
‘伍’ C语言二叉树的叶子结点数统计
int nodenum(bt *t);
{
int lnum=rnum=0;
if(t->lch != NULL) lnum=nodenum(t->lch);
if(t->rch != NULL) rnum=nodenum(t->lch);
if(t->lch == NULL && t->rch ==NULL) return 1;
return lnum+rnum;
}
‘陆’ 如何才能C语言编程实现求一棵二叉树的结点总数急!!!
用递归啊,除了叶子节点以外,每个节点都有左子树和右子树,只要判断子节点不为空就用递归调用函数统一子树的节点数,例如
f(T)=f(L)+f(R)+1;
节点总数等于左子树的节点数+右子树的节点数+1
‘柒’ C语言,用非递归的算法(链栈)计算二叉树的结点数。
#包括
使用命名空间std;
定义MAX 100
类二叉树
{
char数据;
二叉树* lchild;
二叉树* rchild;
};的
二叉树* creatree()/ /非递归创建一棵二叉树
{ />字符CH;
诠释前面= 1,后= 0; / /初始化队列
B树*根*,S * Q [MAX];
根= NULL;
cout <<“请'@'表示'空','#',”结束“,他的贡献层:”<< endl;
CH = getchar函数();
而因素(ch! = '#')
{
= NULL,/ /读取的第一个假设是空的节点_at_
(ch! =“_at_')
{
新的二叉树;
- >数据= CH;
- > lchild = NULL;
- > rchild = NULL;
}
后端的团队+ +; / /指针递增
Q [后] =;
如果(后部== 1)
根= / /根
其他
{
(S && Q [前方])/ /当前节点的父节点是不是空的节点
(后部%2 == 0)
Q [前] - > lchild;
其他
Q [前] - > rchild =;
(背面%2 == 1)
前+ +;
} BR /> CH = getchar函数()/ /读出下一个节点的值
}
返回根;
}
无效后序(B树* BT)
二叉树* p = BT,*栈[MAX] ;/ / p表示当前节点协议栈栈[]
INT标记用于存储节点[MAX];
顶部= -1 ;
{
在while(p! = NULL)/ /第一个处理器节点的左子节点都留给孩子,反过来堆栈
{
>栈[+ +顶部] = P;
[顶] = 0;
P = P-> lchild;
}
(TOP> = 0)/ /所有留守儿童处理
{
(标记[顶])/ /如果当前节点的右子尚未被访问
{
P =堆栈[顶]; /输出的协议栈节点的顶部,但消失在堆栈中,因为要输出他们的孩子的第一个节点
p = P-> rchild; / /右子节点的处理
标签[顶] = 1; / /在被访问的的堆栈存储节点的右子榜首的位置,下一次你把它退栈直接输出
}
其他
{
法院<数据/ /在栈的栈顶元素,输出的节点,节点p指向NULL
}
}}而(( P = NULL)| |(> = 0));
}
廉政的main()
{
二叉树BT;
BT = creatree();
法院<<'\ n'<<“后序”;
后序(BT);
法院<< endl;
系统(“暂停“);
返回0;
}
‘捌’ 怎么用C语言写求一棵二叉树的叶子结点个数
只写函数,root是根节点
int LeafCount(node root)
{
int i;
if(root)
{
i = !((root->lChild ? 1:0) | (root->rChild? 1:0));
return i + LeafCount(root->lChild) + LeafCount(root->rChild);
}
return 0;
}
‘玖’ C语言中统计二叉树节点的数量。
void CreateBiTree(BiTree bt) //创建一个二叉树
{
char ch;
printf("请输入该二叉树节点的字符,.表示结束:");
ch=getchar();
printf("\n");
if(ch=='.') bt=NULL;
else
{
bt=(BiTree)malloc(sizeof(BiTNode));
bt->data=ch;
CreateBiTree((bt->LChild));
CreateBiTree((bt->RChild));
}
这个函数里面
ch = getchar();
后面应该加一个
temp = getchar();
是因为你按得回车同样被当做一个符号被输入进二叉树
‘拾’ 怎么计算C语言的二叉树中的叶子节点数
结点的度是指,该结点的子树的个数,在二叉树中,不存在度大于2的结点。
计算公式:n0=n2+1
n0
是叶子节点的个数
n2
是度为2的结点的个数
n0=n2+1=5+1=6
故二叉树有5个度为2的结点,则该二叉树中的叶子结点数为6。
(10)求二叉树的所有结点c语言扩展阅读
叶子结点是离散数学中的概念。一棵树当中没有子结点(即度为0)的结点称为叶子结点,简称“叶子”。
叶子是指度为0的结点,又称为终端结点。
叶子结点
就是度为0的结点
就是没有子结点的结点。
n0:度为0的结点数,n1:度为1的结点
n2:度为2的结点数。
N是总结点
在二叉树中:
n0=n2+1;
N=n0+n1+n2
参考资料:叶子结点_网络