1. 编写算法,判断一颗二叉树是否是完全二叉树
#include <stdio.h>#include <stdlib.h>#define Max 100 typedef struct Node { char data; struct Node * LChild,*RChild;}BiTNode,*BiTree; void CreateBiTree(BiTree * bt) { char ch; ch=getchar(); if(ch==10)ch=getchar();//如果为 回车换行 读取下一个字符 if(ch=='.') *bt=NULL; //如果为 . 代表此节点为空 else { * bt=(BiTree)malloc(sizeof(BiTNode)); (* bt)->data=ch; //赋值 CreateBiTree(&((* bt)->LChild)); CreateBiTree(&((* bt)->RChild)); } } bool fullBiTree(BiTree b) { if(b->LChild==NULL && b->RChild==NULL)return true;// 如果左右子树为空,返回真 if(b->LChild==NULL || b->RChild==NULL)return false;// 如果左右子树只有一个为空,返回假 return fullBiTree(b->LChild) && fullBiTree(b->RChild);// 通过递归,返回 } void main(){ printf("请依次输入字符\n"); BiTree b; CreateBiTree(&b); //创建二叉树 bool cm=fullBiTree(b); if(cm)printf("´此二叉树为完全二叉树\n"); else printf("´此二叉树不是完全二叉树\n"); }2. 判断一棵二叉树是否为完全二叉树算法
#include "stdafx.h"
#include "iostream"
#define Max 100
using namespace std;
typedef struct Node
{ char data;
struct Node * LChild,*RChild;}BiTNode,*BiTree;
void CreateBiTree(BiTree * bt)
{
char ch;
ch=getchar();
if(ch=='.') *bt=NULL;
else
{
* bt=(BiTree)malloc(sizeof(BiTNode));
(* bt)->data=ch;
CreateBiTree(&((* bt)->LChild));
CreateBiTree(&((* bt)->RChild));
}
}
int fullBiTree(BiTree b)
{ //complete binary tree:完全二叉树
//full:满
BiTree queue[Max],p;
int first=0,rear=0,bj=1,cm=1;
if(b!=NULL)
{
rear++;
queue[rear]=b;
while(first!=rear)
{
first++;
p=queue[first];
if(p->LChild==NULL)
{
bj=0;
if(p->RChild!=NULL) cm=0;
}
else
{
cm=bj;
rear++;queue[rear]=p->LChild;
if(p->RChild==NULL) bj=0;
else
{
rear++;
queue[rear]=p->RChild;
}
}
}
return cm;
}
return 1;
}
int main(int argc, char* argv[])
{
cout<<"请依次输入字符ABCO..UMJKL.EDC....."<<endl;
BiTree b;
CreateBiTree(&b);
int cm=fullBiTree(b);
if(cm)cout<<"此二叉树为完全二叉树"<<endl;
else cout<<"此二叉树不是完全二叉树"<<endl;
return 0;
}
3. 怎么判断是否是完全二叉树 用C++或C语言
你可以上网先找一个用队列实现二叉树的广度优先搜索的代码,然后在代码中增加一个标志变量tag,初始化为0。然后找到代码中访问结点的那句代码,在那句代码处增加
if(tag==0)
判断该结点是否有两个孩子,如果没有两个孩子,则将tag=1
else
判断该结点是否为叶结点,如果不是叶结点,则不是完全二叉树。
4. 用c++ 完成以下算法:判别一棵树是否为二叉树!
这里可以用递归
不过不知道你的树是哪种方式定义的具体代码就不写了,大体过程如下
if 结点有三个以上的结点 则返回不是,函数退出
if 第一个子结点不为空 判断该子结点是否为二叉树(也就是调用递归函数)
if 第二个子结点不为空 判断该子结点是否为二叉树(也就是调用递归函数)
还要加入一些必要的东西,乖下的你自己看看吧
5. 用c语言版数据结构的算法实现判断一棵二叉树是否为完全二叉树的算法
遍历一下算出这棵树的深度k,然后用公式看看深度和点数之间是否具有点数n=2^k-1的关系,具有就是完全二叉树,否则不是。
6. 算法:判断一棵树是否是平衡二叉树
判断一颗数是否是平衡二叉树。
平衡二叉树。左孩子节点,总是小于父节点,右孩子节点总是大于父节点。
对于每一个节点都符合这样的特性。
不是很麻烦,对于平衡二叉树来说,它的中序遍历必定是一个升序序列。
直接中序遍历,如果出现后面的节点小于前面必定不是平衡二叉树
这里保存的是上一个节点,如果只保存上一个值,需要考虑int值上下界限。有可能输入Integer.MAX_VALUE的这种情况
7. 假设二叉树用二叉链表表示;设计一算法,判别该二叉树是否为完全二叉树。(求完整源代码)如题 谢谢了
一定要完整源码?如果没有人给的话,建议你还是看一下我说的:就是一个二叉树的遍历。1.只要在遍历的时候,发现当前深度大于log2(n)+1,就可以判断不是。2.有一个变量,cnt初始化为n个节点的完全二叉树最后一层节点的数目,计算方法:n - (2^k - 1)然后,只要不是后序遍历,每次遍历到深度为floor(log2(n))时,如果cnt不为0,而且儿子是空节点,则判断不是,否则cnt--。遍历完后,如果一直没有判断成不是,则一定是。
8. 编写一算法,判别给定的二叉树是否是完全二叉树。二叉树用二叉链表储存结构储存
#include <stdio.h>#define MaxNum 10000BinTree buildTree(elementype BT[],int i , int n){ BinTree r;if(i>n)return(NULL);r=(BinTree)malloc(sizeof(BinNode));r->data=BT[i];r->Lchild=buildTree(BT,2*i,n);r->Rchild=buildTree(BT,2*i+1,n);return(r);}Int checkTree(BinTree t){ int maxn0=0;n=num(t,1,&maxn0);if(n==maxn0)return(1); else return(0); }int num(BinTree t,int i,int *m){ if(t==NULL) return(0); if(*m<i)*m=i;return(1+num(t->Lchild,2*i,m)+num(t->Rchild,2*i+1,m));}main( ){ int data,int t,int i,int *m; printf("input data:\n") scanf("%d,&data");if(t==NULL)printf("F\n")if(*m<i)*m=i;printf("T\n")}
9. 请编写一个判别给定二叉树是否为二叉排序树的算法
1、首先打开VC++6.0。
7、运行得到结果。