以二叉链表为存储结构,分别写出求二叉树结点总数及叶总数的算法。(数据...
发布网友
发布时间:2022-05-29 20:28
我来回答
共3个回答
热心网友
时间:2023-01-25 09:12
int CountNode (BTNode *t) //节点总数
{
int num;
if (t == NULL)
num = 0;
else
num = 1 + CountNode (t->lch) + CountNode (t->rch);
return (num);
}
void CountLeaf (BTNode *t) //叶子节点总数
{
if (t != NULL)
{
if (t->lch == NULL && t->rch == NULL)
count ++; // 全局变量
CountLeaf (t->lch);
CountLeaf (t->rch);
}
}
热心网友
时间:2023-01-25 10:30
//求叶子节点数
#include<iostream>
using namespace std;
int n=0;//全局变量求叶子总数
template <class T>
struct BiNode
{
T data;
BiNode<T>*lchild,*rchild;
};
template <class T>
class BiTree
{
public:
BiTree(){root=Creat(root);}
int PreOrder(){return PreOrder(root);}
private:
BiNode<T>*root;
int count;
BiNode<T>*Creat(BiNode<T>*bt);
int PreOrder(BiNode<T>*bt);
};
template <class T>
int BiTree<T>::PreOrder(BiNode<T>*bt)
{
if(bt==NULL)return 0;
else{
PreOrder(bt->lchild);
n++;
PreOrder(bt->rchild);
}
return n;
}
template<class T>
BiNode<T>*BiTree<T>::Creat(BiNode<T>*bt)
{ char ch;
cin>>ch;
if(ch=='#')bt=NULL;
else{
bt=new BiNode<T>;bt->data=ch;
bt->lchild=Creat(bt->lchild);
bt->rchild=Creat(bt->rchild);
}
return bt;
}
int main()
{ int t;
BiTree<char> Bt;
t=Bt.PreOrder();
if(t==0)cout<<"NULL"<<endl;
else cout<<t<<endl;
return 0;
}
//求二叉树结点总数
#include<iostream>
using namespace std;
int n=0;
template <class T>
struct BiNode
{
T data;
BiNode<T>*lchild,*rchild;
};
template <class T>
class BiTree
{
public:
BiTree(){root=Creat(root);}
int PreOrder(){return PreOrder(root);}
private:
BiNode<T>*root;
int count;
BiNode<T>*Creat(BiNode<T>*bt);
int PreOrder(BiNode<T>*bt);
};
template <class T>
int BiTree<T>::PreOrder(BiNode<T>*bt)
{
if(bt==NULL)return 0;
else{
PreOrder(bt->lchild);
n++;
PreOrder(bt->rchild);
}
return n;
}
template<class T>
BiNode<T>*BiTree<T>::Creat(BiNode<T>*bt)
{ char ch;
cin>>ch;
if(ch=='#')bt=NULL;
else{
bt=new BiNode<T>;bt->data=ch;
bt->lchild=Creat(bt->lchild);
bt->rchild=Creat(bt->rchild);
}
return bt;
}
int main()
{ int t;
BiTree<char> Bt;
t=Bt.PreOrder();
if(t==0)cout<<"NULL";
else cout<<t;
return 0;
}
热心网友
时间:2023-01-25 12:05
先设计了一个结构体形式int n; cout<<"请输入二叉树内容:第一行为节点总数n ,后面的n行是节点,谢谢
以二叉链表为存储结构,分别写出求二叉树结点总数及叶子总数的算法...
【答案】:(1)计算结点总数 int CountNode(BinTree*root){ intnum1,num2;if(root==Null)return(0);else if(root->lchild==Null&&rooot->rchild==Null)return(1);else { num 1=CountNode(root->lchild);num 2=CountNode(root->rchild);return(num1+num2+!);} } (2)计算叶子总数...
非结构化数据如何可视化呈现?
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准...
以二叉链为存储结构,写一算法求二叉树的叶子结点个数
Status Visit(TElemType e) //对结点的操作函数 { cout<<e;return ' ';} void InOrderTraverse(BiTree T,Status (*visit)(TElemType )) //中序遍历T,对每个结点调用函数Visit一次且仅一次,一旦失败,则操作失败 { if(T) //若二叉树不为空 { InOrderTraverse(T->lchild, visit); //递归调...
假设二叉树以二叉链表作为存储结构,试设计一个计算二叉树叶子结点树的...
2、二叉树类的组成:建立树的函数、遍历函数、删除函数。求结点数函数。3、采用递归的思想,遇到标识符表示该结点为空,否则开辟空间创建新结点,同时调用递归开辟左结点和右结点。4、前序遍历函数。5、删除函数的思路:如果当前结点不为空,采用递归访问左结点和右结点、回收当前结点的空间。6、求结点数...
以二叉链表为存储结构。分别写出在二叉树中查找值为X的结点及求X所在的...
} NodePos;//前序查找,如果返回0,说明树中没有这个数 depth参数为 根结点的层数,由用户定 int PreSeek(BiTree *T, int data, int depth, NodePos *p){ int ret=0;if (T->data == data){ p->Depth = depth;p->pos = T;ret = 1;} else { if (T->lchild)ret += PreSeek...
假定一棵二叉树用二叉链表存储试编写求出二叉树中1度结点个数的算法
1度结点 2度结点个数分别为x0 x1 x2 / x0+x1+x2 = node_count;//三种结点数之和为总结点数 0*x0 + 1*x1 + 2*x2 = node_count - 1;//树枝数等于结点数减1(去掉根结点)一式乘2减二式得 2*x0 + x1 = node_count + 1;因此只要知道叶子数和总结点数就可得1度结点个数 ...
用C语言定义二叉树的二叉链表存储结构,完成二叉树的建立,先序中序后...
int leaf=0; //求叶子节点数 int depth(TLNode Tree){ //深度 int s1,s2;if(Tree==NULL)return 0;else{ s1=depth(Tree->lchild);s2=depth(Tree->rchild);if(s1==0 && s2==0) leaf++;return (s1>s2?s1:s2)+1;} } int Cnode(TLNode Tree){ //总结点 int s1,s2;if(...
以二叉链表作存储结构,试编写求二叉树高度的算法
2014-07-11 以二叉链表作为存储结构编写计算二叉树中叶子结点数目的递归算法 5 2011-01-16 试以二叉链表作存储结构,编写按层次顺序遍历二叉树的算法! 2 2014-12-25 以二叉链表为存储结构,分别写出求二叉树结点总数、叶子总数及树... 4 更多类似问题 > 二叉链表的相关知识2008...
假设二叉书采用二叉链表存储结构,设计一个算法,求二叉树中指定结点x...
初始值为0 下列算法是递归嵌套。1、n++,遍历当前节点的左子树 2、n--,访问当前节点,如果节点的data==x,那么(意味着找到节点了)打印节点层数 3、n++,遍历当前节点的右子树 递归结束后,如果没有找到X节点不要忘了,打印一下没有找到。参考资料:严蔚敏清华大学出版社《数据结构》第二版 ...
以二叉链表存储二叉树,分别写出在二叉树中查找值为x的结点在树中的层...
以先序为例,遍历二叉树,a(Linklist L,int count){ if(L!=NULL){ if(L->data==x){print count; } a(L->lchild,count+1);a(L->rchild,count+1);} } 程序简单了些,大概就是这个意思
已知一棵二叉树是以二叉链表的形式存储的求出以T为根的子树的结点个数...
已知一棵二叉树是以二叉链表的形式存储的,其结点结构说明如下:structnode{intdata;structnode*left;structnode*right;};要求写出2个具有下面功能的算法:①、求出以T为根的子树的结... 已知一棵二叉树是以二叉链表的形式存储的,其结点结构说明如下:struct node{int data;struct node * left;struct node * right...