c语言二叉树结点

如何才能C语言编程实现求一棵二叉树的结点总数?急!!!~

(1)求结点数的递归定义为:
若为空树,结点数为0
若只有根结点,则结点数为1;
否则,结点数为根结点的左子树结点数+右子树结点数+1

(2)求叶子数的递归定义为:
若为空树,叶子数为0
若只有根结点,则叶子数为1;
否则,叶子数为根结点的左子树叶子数+右子树叶子数

typedef char DataType;//定义DataType类型
typedef struct node{
DataType data;
struct node *lchild, *rchild;//左右孩子子树
}BinTNode; //结点类型
typedef BinTNode *BinTree;//二叉树类型

int Node(BinTree T)
{//算结点数
if(T)
if (T-> lchild==NULL )&&( T --> rchild==NULL )
return 1;
else return Node(T-> lchild ) +Node ( T --> rchild )+1;
else return 0;
}

int Leaf(BinTree T)
{ //算叶子数
if(T)
if (T-> lchild==NULL )&&( T --> rchild==NULL )
return 1;
else return Leaf(T-> lchild ) +Node ( T --> rchild );
else return 0;
}

如果只是定义的话,下面的code就可以了,欢迎交流struct Node{ int value;//二叉树的值 Node* left; //指向左子树 Node* right;//指向右子树};

二叉树的重要性质:在任何二叉树中,叶子结点数总比度为2的结点多1。
证明:设n0为二叉树的叶结点数;n1为二叉树中度为1的结点数;n2为二叉树中度为2的结点数,显然n=n0+n1+n2 (1)
由于二叉树中除了根结点外,其余每个结点都有且仅有一个前件。设 b为二叉树的前件个数,n=b+1(2)
所有这些前件同时又为度为1和度为2的结点的后件。因此又有b=n1+2n2 (3)
我们将(3)代入(2)得出n=n1+2n2+1 (4)
比较(1)和(4),得出n0=n2+1,即叶子数比度为2的结点数多1

这是定理哦

用C语言建立一棵含有n个结点的二叉树,采用二叉链表存储,然后分别实现...
答:char data;struct node *lc,*rc; //左右子树 }bt,*list;/ 二叉树 A / \ B C / \ \ D E F / / \ K G H input ABDK000E00C0FG00H00 ouput ABDKECFGH KDBEACGFH KDEBGHFCA / int creat(list*root){ //创建一棵二叉树,root使用的是二维指针 char n...

计算机c语言中 什么是二叉树
答:在计算机科学中,二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用作二叉查找树和二叉堆或是二叉排序树。二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树...

C语言 什么叫完全二叉树?
答:完全二叉树是一种特殊的二叉树。定义:如果一棵具有n个结点的深度为k的二叉树,它的每一个结点都与深度为k的满二叉树中编号为1~n的结点一一对应,这棵二叉树称为完全二叉树。例:特点:叶子结点只可能在最大的两层上出现,对任意结点,若其右分支下的子孙最大层次为L,则其左分支下的子孙的最大...

c语言,二叉树求解~
答:先考虑度为2的结点,第一层1个,第二层2个,第三层4个,第四层8个,第五层8个,共23个。然后第5层还有8个空位,先假设为叶子节点,即度为0。第五层满,目前总共31个结点。然后第五层的8个度为2的结点可以引申出16个叶子结点,总共47个,以满足题意,假设成立。故6层。当然比较简单的题画...

数据结构 c语言版二叉树(1) 建立一棵含有n个结点的二叉树,采用二叉链 ...
答:;} } void main(){ printf("构建一个二叉树(结点数为n):\n");root=create(root);printf("前序遍历二叉树:\n");preorder(root);printf("\n");printf("中序遍历二叉树:\n");inorder(root);printf("\n");printf("后序遍历二叉树:\n");postorder(root);printf("\n");} ...

二叉树中结点的遍历序列是什么?
答:前序遍历的结点序列是:BEFCGDH;中序遍历的结点序列是:FEBGCHD;后序遍历的结点序列是:FEGHDCB。前序遍历首先访问根结点然后遍历左子树,最后遍历右子树;序遍历首先遍历左子树,然后访问根结点,最后遍历右子树;后序遍历先左后右再根,即首先遍历左子树,然后遍历右子树,最后访问根结点。

按先序次序建立以下二叉树,然后按先序的顺序输出结点的值、层次、左右...
答://构造二叉树 Status CreateBiTree(BiTree &T){ elemtype ch;ch=getchar();if(ch==' '){T=NULL;} else{ if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))return FALSE;T->data=ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild);} return OK;} // 先序遍历 void PreOrderTraverse(...

C语言问题:一棵二叉树中共有90个叶子结点与10个度为1的结点,则该二叉树...
答:2。一个二叉树共有总节点数-1个叉,每个度为2的节点有2个叉,度为1的节点有1个叉,叶子节点没有叉,所以可知度为2的节点数*2+度为1的节点数=总节点数-1 由上述可得方程组:m+10+90=n m*2+10=n-1 联力计算可得m=89,n=189.具体的程序你就自己写一下吧,我就只给你这个算法了。

c语言数据结构与算法。下边的二叉树题中“度为1,2,3,4的结点个数”度...
答:度为i的每个结点关联i个分支,所以ni个度为i个结点关联i*ni个分支,i=0,1,2,3,4)n=0*n0+1*n1+2*n2+3*n3+4*n4+1=n0+n1+n2+n3+n4 n0=n2+2*n3+3*n4+1=2+2*1+3*1+1=8。答案A)其中,ni(i=0,1,2,3,4)表示度为i的结点数,叶子结点数为n0,B为树的分支总数。

用C语言定义二叉树的二叉链表存储结构,完成二叉树的建立,先序中序后...
答:Tree;printf("input 根节点: ");create(&Tree);printf("先序遍历:");print1(Tree);printf("中序遍历");print2(Tree);printf("后序遍历");print3(Tree);printf("\n深 度:%d \n",depth(Tree));printf("总结点数:%d \n",Cnode(Tree));printf("叶子结点数:%d\n",leaf);} ...

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网