判断二叉树是否是完全二叉树,求二叉树宽度
2012-08-06 22:32
369 查看
算法1:若无左子女则不应该有右子女
2.求二叉树宽度
3.二叉树k层叶子结点
#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大于二叉树层数 }
相关文章推荐
- 判断二叉树是否平衡、是否完全二叉树、是否二叉排序树
- 二叉树面试题:判断树是否为完全二叉树和求二叉树的镜像
- 以二叉链表的方式创建一棵二叉树,并以非递归算法中序输出;计算二叉树的繁茂度,并判断二叉树是否为完全二叉树
- 如何判断一棵二叉树是否是完全二叉树
- 判断一颗二叉树是否是完全二叉树
- 判断一颗二叉树是否是完全二叉树
- 判断二叉树是否平衡、是否完全二叉树、是否二叉排序树
- 二叉树问题---判断一棵树是否为完全二叉树
- 判断二叉树是否平衡、是否完全二叉树、是否二叉排序树
- 判断一棵树是否是完全二叉树和求二叉树中两个节点的最近公共祖先——题集(十三)
- 判断二叉树是否为完全二叉树
- 判断二叉树是否为完全二叉树
- 判断一棵二叉树是否为完全二叉树
- 二叉树经典面试题4~判断一棵树是否是完全二叉树
- 判断二叉树是否平衡、是否完全二叉树、是否二叉排序树
- 二叉树面试题-镜像与判断是否为完全二叉树
- 二叉树面试题—前,中,后序(非递归),判断是否为完全二叉树
- 判断一棵二叉树是否是完全二叉树
- 判断二叉树是否为完全二叉树的实例
- 二叉树--判断一棵树是否是完全二叉树