建立一棵二叉树,数据以字符串形式从键盘输入。
代码如下:
char a[105];
int len,i;//i逐渐增加
void build(int s){
if(i==len) return;//已经建完树了
char c=a[i];//当前的字符
i++;
if(!tree[s].l) tree[s].l=c;//如果树的左边是空的,就给左边赋值
else tree[s].r=c;//反之
if(c!=' ') build(c);
if(c!=' ') build(c);//再来递归两下
}
扩展资料
树的定义还需要强调以下两点:
1)n>0时根结点是唯一的,不可能存在多个根结点,数据结构中的树只能有一个根结点。
2)m>0时,子树的个数没有限制,但它们一定是互不相交的。
由树的定义可以看出,树的定义使用了递归的方式。递归在树的学习过程中起着重要作用。
结点拥有的子树数目称为结点的度。结点子树的根结点为该结点的孩子结点。相应该结点称为孩子结点的双亲结点。从根开始定义起,根为第一层,根的孩子为第二层,以此类推。树中结点的最大层次数称为树的深度或高度。二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树组成。
由二叉树定义以及图示分析得出二叉树有以下特点:
1)每个结点最多有两颗子树,所以二叉树中不存在度大于2的结点
2)左子树和右子树是有顺序的,次序不能任意颠倒。
3)即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。
参考资料来源:
百度百科——二叉树
数据结构问题。设一棵二叉树中,度为1的结点数为9,则该二叉树的叶结点...
选D吧,我记得好像度为0的结点个数是度为2的结点个数加1即n0 = n2 +1;是通过出度和节点数算的
数据结构问题:一棵完全二叉树有100个结点,度为一的结点有几个,叶子结...
如果叶子节点数为n0,度为2的结点数为n2,则no=n2+1.根据完全二叉树的定义可得:在完全二叉树中度为1的结点n1只能取两种情况,要么为0,要么为1. 所以:n0+n1+n2=100 又n0=n2+1; 2n2=99-n1; 因为结点数为整数,所以n1=1,n2=49,n0=50 所以度为1的结点有一个,叶子结点有50个 ...
二叉树的性质
对任意一棵二叉树,如果其叶子结点数,也就是度为0的节点数为n0。比中度为0的节点数为8,度为2的节点数为7,经过简单的计算知道8=7+1,现在对性质三进行解释,对于任意一棵二叉树,它的节点分为三种。二叉树的相关术语 1、节点:包含一个数据元素及若干指向子树分支的信息。2、节点的度:一个...
设一棵完全二叉树有2000个结点,则此完全二叉树有多少个叶结点,有多少个...
此完全二叉树除了第一层父节点1个节点,2层以下每层有2个父节点,一个叶子点,设总的父节点n,则2n+1=2009,即n=1004,所以叶子节点为2009-1004=1005;由上可知每个父节点的度为2,所以度为2的节点为1004.
将一棵有含有50个结点的二叉树,度为0的结点的个数为5个,度为1的结点的...
就是只有一个分支的结点个数; n2表示度为2的结点个数,就是有左右两个分支的结点个数.另外,有公式:总节点数N = 分支数 + 1而在二叉树中,分支数 = 0*n0 + 1*n1 + 2*n2 也就是,总节点数N = 分支数 + 1 = 0*n0 + 1*n1 + 2*n2 + 1 (公式2)由公式1和公式2,得出等式...
二叉树是重要的数据结构,五个点的不同的二叉树有几个?
一个有n个结点的二叉树可以看作由三个部分组成,一个根结点,一个含i个结点的左子树,一个含n-i-1个结点的右子树,其中i的取值为0到n-1。设所求的不相似二叉树有bn种,其中n是下标为结点的个数,则b0=1(空二叉树) ,b1=1(一个根结点),b2=2(一种只有左子树,另一种只有右子树) ...
数据结构 一棵二叉树如下图所示 写出对此二叉树进行中序遍历时得到的...
中序遍历:EFGBCHDA
...以二叉链表为存储结构,建立一棵二叉树,输出其先序,中序,后序遍历序...
printf("1.The preorder traverse \\n");printf("2.The inorder traverse \\n");printf("3.The postorder traverse \\n");printf(" Please choose a kind of order\\n");scanf("%d",&i);switch(i){ case 1:preorder(root);break;case 2:inorder(root);break;case 3:postorder(root);...
...关于二叉树 一棵124个叶结点的完全二叉树,最多有?结点? 答案给的...
一棵124个叶结点的完全二叉树,假设n0为叶子结点数,n1为度为1结点数,n2为度为2结点数,则有总结点数为n0+n1+n2;而n2=n0-1=123;且完全二叉树中度为1的结点只能为一个或0个,所以总结点数为124+1+123=248个
一道数据结构,完全二叉树的题目,求助!
设根节点的深度为1。从上到下的个数依次为1\/2\/4\/8……,每层最多有叶子节点的个数为2的(i-1)次方,i 为深度。这里的n=64,因此,64=2的(i-1)方,所以i=7。 但是,由于是完全二叉树,因此可以在第八层里有1个叶子节点(最多只能有一个),第八层的那个叶子节点将第七层的覆盖。...
子伏板蓝: 代码如下: char a[105]; int len,i;//i逐渐增加 void build(int s){ if(i==len) return;//已经建完树了 char c=a[i];//当前的字符 i++; if(!tree[s].l) tree[s].l=c;//如果树的左边是空的,就给左边赋值 else tree[s].r=c;//反之 if(c!=' ') build(c); if(c!=' ') build(c);//再...
张湾区14720916023: 以字符串的形式定义一棵二叉树:根 左子树 右子树?
子伏板蓝: #include <stdio.h> #include <conio.h> typedef struct tagBiTreeNode { char ch; struct BiTreeNode *lchild,*rchild; }BiTreeNode; BiTreeNode *CreateBiTree(); void InOrderTraverse(BiTreeNode *pRoot); void DestroyBiTree(BiTreeNode *pRoot); void ...
张湾区14720916023: 如何建立一棵二叉树,结点信息是一串字符串,而不是单个字符 - ?
子伏板蓝: 可以将字符串作为一个结构体,并定义为树的节点.
张湾区14720916023: 急!!!C++问题 - ?
子伏板蓝: //两个都是c++头文件//第一个// TREENODE.H// Definition of class TreeNode#ifndef TREENODE_H#define TREENODE_H template class Tree; // forward declaration template class TreeNode { friend class Tree; public: TreeNode( const ...
张湾区14720916023: 用C语言编:构造一棵二叉树的二叉链表,并输出此二叉树的中序遍历序列和后序遍历序列.数据元素为字符型 - ?
子伏板蓝: 先序创建一颗二叉树遍历;#include<stdio.h>#include<stdlib.h>#include<malloc.h>#define OVERFLOW -2#define OK 1#define ERROR 0 typedef int status; typedef char TElemtype; typedef struct BiTNode{ TElemtype data; struct BiTNode *lchild,*...
张湾区14720916023: 二叉树的建立,二叉树的遍历. - ?
子伏板蓝: #include "stdio.h"//二叉树的练习 typedef struct BiTNode { char data; /*结点的数据域*/ struct BiTNode *lchild , *rchild; /*指向左孩子和右孩子*/ } BiTNode , *BiTree;/*创建一棵二叉树*/ CreatBiTree(BiTree *T) { char c; c = getch(); printf("get = ...
张湾区14720916023: 怎样把输入的字符保存成一棵树 - ?
子伏板蓝: 这个定义没有说清楚,是要求什么样的树?因为树的实现可以多种多样.比方说2叉树,他可以用动态存储,也可以用顺序存储.最简单的实现方法,你可以用字符串的形式读入.它自己就实现了一棵满二叉树的顺序存储.如果是要实现二叉树的动态存储,那么就按每一个字符一个节点的方式,进行插入节点.至于节点之间的逻辑关系,可以是简单的顺序暗黄存储,也可以按要求进行二叉树插入排序等等.
张湾区14720916023: 求数据结构 用键盘输入一个字符串,按照满二叉树的特点生成一颗二叉树.要求用递归方法生成二叉树 - ?
子伏板蓝: #include <stdio.h> #include<malloc.h> typedef struct node //二叉树结点类型的定义 { char data; struct node *lchild; //定义结点的左孩子指针 struct node *rchild; //定义结点的右孩子指针 }BinTNode; BinTNode *CreateBinTree() //输入二叉树的先...
张湾区14720916023: 高分求数据结构 用键盘输入一个字符串,按照满二叉树的特点生成一颗二叉树.要求用递归方法生成该二叉树?
子伏板蓝: status CreateBiTree(BiTree &T,char s[],int n) { if(n>=strlen(s)) T=NULL; else{ if (!(T = (BiTNode *)malloc(sizeof(BiTNode)))) exit(OVERFLOW); T->data = s[n]; // 生成根结点 CreatBiTree(T->lchild,s,2*n+1); // 构造左子树 CreatBiTree(T->rchild,s,2*(n+1)); // 构造右子树 } return OK; } 第一次调用时,参数n是0.
张湾区14720916023: 请问C语言如何创建二叉树???? - ?
子伏板蓝: 创建二叉树的源程序如下: #include <cstdlib>#include <stdio.h>typedef struct node{ //树的结点int data;struct node* left;struct node* right;} Node;typedef struct{ //树根Node* root;} Tree;void insert(Tree* tree, int value)//创建树{Node* ...