您的位置:首页 > 其它

判断二叉树是否是完全二叉树,求二叉树宽度

2012-08-06 22:32 369 查看
算法1:若无左子女则不应该有右子女

#include "stdafx.h"
#include<iostream>
#include<queue>
using namespace std;

typedef struct BTreeNode
{
int data;
struct BTreeNode *lchild,*rchild;
}BTree;
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
int JudgeComplete(BTree *bt)
{
int tag=0;
BTree *p=bt;
queue<BTree*> q;
if(bt==NULL)
{
return 1;
}
q.push(bt);//根节点入队列
while(!q.empty())
{
p = q.front();q.pop();// 返回队首元素并出队
if(p->lchild&&tag==1)
{
q.push(p->lchild);//左子女入队
}
else if(p->lchild)return 0;//前面已有结点为空,本结点不空
else tag=1;//首次出现结点为空
if(p->rchild&&tag==1)
{
q.push(p->rchild);//右子女入队
}
else if(p->rchild)return 0;//前面已有结点为空,本结点不空
else tag=1;//首次出现结点为空
}
return 1;
}


2.求二叉树宽度

#include "stdafx.h"
#include<iostream>
#include<queue>
using namespace std;

typedef struct BTreeNode
{
int data;
struct BTreeNode *lchild,*rchild;
}BTree;
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
int width(BTree *bt)
{
BTree *p=bt;
if(bt)return 0;
BTree *q[100];
int front=0,rear=0;//队头指针,队尾指针
int last=0;//同一层最右结点在队列中位置
int temp=0,maxw=0;//当前层宽度与最大宽度
q[rear]=bt;
while(front<=last)
{
p=q[front++];temp++;//同层元素加1;
if(p->lchild)q[rear++]=p->lchild;
if(p->rchild)q[rear++]=p->rchild;
if(front>last)//一层结束
{
last=rear;
if(temp>maxw)maxw=temp;//更新最大宽度
temp=0;
}
}
return maxw;
}


3.二叉树k层叶子结点

// 1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<iostream>
#include<queue>
using namespace std;
typedef struct BTreeNode
{
int data;
struct BTreeNode *lchild,*rchild;
}BTree;
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
int leafKlevel(BTree *bt,int k)
{
BTree *p=bt;
if(bt||k<1)return 0;
BTree *q[100];
int front=0,rear=0;//队头指针,队尾指针
int last=0;//同一层最右结点在队列中位置
int level=1;//层数
int leaf=0;
q[rear]=bt;
while(front<=rear)
{
p=q[front++];
if(level==k&&!p->lchild&&!p->rchild)leaf++;//叶结点
if(p->lchild)q[rear++]=p->lchild;
if(p->rchild)q[rear++]=p->rchild;
if(front==last)//二叉树同层最右结点已处理,层数增1
{
level++;last=rear;
}
if(level>k)return leaf;
}
return 0;//k大于二叉树层数
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: