二叉树的创建和遍历
来源:互联网 发布:mac截图存在哪里 编辑:程序博客网 时间:2024/06/09 15:58
今天呢 主要想写点关于二叉树按层遍历
程程序功能:按层遍历二叉树
编程思想:按层遍历如果直接函数递归的话,会直接深入底层,达不到按层遍历的效果,所以需要我们学的另一种数据结构思想(队列)。
一 二叉树的定义
二 按层遍历二叉树
1. 需要创建队列将头结点root入队
2. 当队列不空时,获得队首元素root并出队遍历
3. 当root->left左子女存在时入队,root->rght存在时入队
4. 进入循环,直到队列为空遍历结束
三. 具体源码如下
#include <stdio.h>
#include <stdlib.h>
#include <queue>
#include<vector>
using namespace std;
typedef struct node
{
int data;
struct node *left;
struct node *right;
}BTnode;
#include <stdlib.h>
#include <queue>
#include<vector>
using namespace std;
typedef struct node
{
int data;
struct node *left;
struct node *right;
}BTnode;
//创建二叉树
BTnode *CreateLink(int a[],int n);
//中序遍历二叉树
void printLink(BTnode *h);
//按层遍历二叉树
void Levelorder(BTnode *root);
BTnode *CreateLink(int a[],int n);
//中序遍历二叉树
void printLink(BTnode *h);
//按层遍历二叉树
void Levelorder(BTnode *root);
int main(void)
{
int a[10]={3,2,5,8,4,7,6,9,1,0};
BTnode *root;
root=CreateLink(a,10);
printLink(root);
printf("\n");
Levelorder(root);
return 0;
}
{
int a[10]={3,2,5,8,4,7,6,9,1,0};
BTnode *root;
root=CreateLink(a,10);
printLink(root);
printf("\n");
Levelorder(root);
return 0;
}
BTnode *CreateLink(int a[],int n)
{
BTnode *root,*p,*c,*pa;
root=(BTnode *)malloc(sizeof(BTnode));
root->data=a[0];
root->left=root->right=NULL;
for(int i=1;i<n;i++)
{
p=(BTnode *)malloc(sizeof(BTnode));
p->data=a[i];
p->left=p->right=NULL;
c=root;
while(c!=NULL)
{
pa=c;
if(p->data<pa->data)
c=c->left;
else
c=c->right;
}
if(p->data<pa->data)
pa->left=p;
else
pa->right=p;
}
return root;
}
void printLink(BTnode *root)
{
if(root)
{
printLink(root->left);
printf("%d\t",root->data);
printLink(root->right);
}
}
void Levelorder(BTnode *root)
{
queue<BTnode *>que;
que.push(root);
while(!que.empty())
{
root=que.front();
que.pop();
printf("%d\t",root->data);
if(root->left!=NULL)
que.push(root->left);
if(root->right!=NULL)
que.push(root->right);
}
}
{
BTnode *root,*p,*c,*pa;
root=(BTnode *)malloc(sizeof(BTnode));
root->data=a[0];
root->left=root->right=NULL;
for(int i=1;i<n;i++)
{
p=(BTnode *)malloc(sizeof(BTnode));
p->data=a[i];
p->left=p->right=NULL;
c=root;
while(c!=NULL)
{
pa=c;
if(p->data<pa->data)
c=c->left;
else
c=c->right;
}
if(p->data<pa->data)
pa->left=p;
else
pa->right=p;
}
return root;
}
void printLink(BTnode *root)
{
if(root)
{
printLink(root->left);
printf("%d\t",root->data);
printLink(root->right);
}
}
void Levelorder(BTnode *root)
{
queue<BTnode *>que;
que.push(root);
while(!que.empty())
{
root=que.front();
que.pop();
printf("%d\t",root->data);
if(root->left!=NULL)
que.push(root->left);
if(root->right!=NULL)
que.push(root->right);
}
}
阅读全文