导航:首页 > 源码编译 > 写出层次遍历二叉树的算法

写出层次遍历二叉树的算法

发布时间:2023-04-20 06:29:57

Ⅰ 如何用C语言实现层次遍历二叉树

下面是c语言的前序遍历二叉树的算法,在这里假设的节点元素值假设的为字符型,
说明:算法中用到了结构体,也用到了递归的方法,你看看怎么样,祝你好运!
#include"stdio.h"
typedef
char
elemtype;
typedef
struct
node
//定义链表结构
{
elemtype
data;
//定义节点值
struct
note
*lchild;
//定义左子节点值
struct
note
*rchild;
//定义右节点值
}btree;
preorder(btree
*root)
//前序遍历
{
if(roof!=null)
//如果不是空节点
{
printf("%c\n",root->data);
//输出当前节点
preorder(root->lchild);
//递归前序遍历左子节点
preorder(root->rchild);
//递归前序遍历右子节点
}
return;
//结束
}

Ⅱ 设二叉树以二叉链表存储,试设计算法,实现二叉树的层序遍历。

按层次遍历算法如下:
#include <iostream>
using namespace std;

typedef struct treenode { //树结点结构
int data;
struct treenode *left;
struct treenode *right;
}TreeNode;

typedef struct stack{ //栈结点结构
TreeNode *node;
struct stack *next;
}STACK;

void Traversal(TreeNode *root)
{
STACK *head = NULL;
STACK *tail = NULL;
if (root != NULL) //根结点入栈
{
head = new STACK();
head->next = NULL;
head->node = root;
tail = head;
}
while(head != NULL)
{
STACK *temp;
if (head->node->left != NULL) //栈顶结点的左结点入栈
{
temp = new STACK();
temp->next = NULL;
temp->node = head->node->left;
tail->next = temp;
tail = temp;
}

if (head->node->right != NULL) //栈顶结点的右结点入栈
{
temp = new STACK();
temp->next = NULL;
temp->node = head->node->right;
tail->next = temp;
tail = temp;
}
cout<<head->node->data<<endl; //结点出栈
temp = head;
head = head->next;
delete(head);
}
}

Ⅲ c++二叉树的几种遍历算法

遍历二叉树的所有结点且仅访问一次。按照根节点位置的不同分为前序遍历,中序遍历,后序遍历(除此之外还有层次遍历,但不常用,此处不做解释)。

1.前序遍历:根节点->左子树->右子树(根节点在前面)。

2.中序遍历:左子树->根节点->右子树(根节点在中间)。

3.后序遍历:左子树->右子树->根节点(根节点在后边)。

例如:求下面树的三种遍历:

前序遍历:abdefgc;

中序遍历:debgfac;

后序遍历:edgfbca。

Ⅳ 编写按层次顺序(同一层从左至右)遍历二叉树的算法

#include<stdio.h>
#include<stdlib.h>
typedef char datatype;
typedef struct node
{datatype data;
struct node *lchild,*rchild;
}bitree;
bitree *Q[100];
bitree *creat()
{
bitree *root,*s;
int front,rear;
root=NULL;
char ch;
front=1;rear=0;
ch=getchar();
while(ch!='0'枝伏喊)
{
s=NULL;
if(ch!='@'厅裂)
{s=(bitree *)malloc(sizeof(bitree));
s->data=ch;
s->lchild=NULL;
s->rchild=NULL;
}
rear++;
Q[rear]=s;
if(rear==1)
root=s;
else
{
if(s&&Q[front])
if(rear%2==0)
Q[front]->lchild=s;
else
Q[front]->rchild=s;
if(rear%2==1)
front++;
}
ch=getchar();
}
return root;
}
void cengci(bitree *t)
{
bitree *Queue[100],*p;
int front=0,rear=0;
if(t)
{
p=t;
Queue[rear]=p;
rear=(rear+1)%20;
while(front!=rear)
{
p=Queue[front];
printf("%c",p->data);
front=(front+1)%100;
if(p->lchild)
{
Queue[rear]=p->lchild;
rear=(rear+1)%100;
}
if(p->rchild)
{
Queue[rear]=p->rchild;
rear=(rear+1)%20;
}
}
}
}

void main()
{struct node *tree;
tree=(bitree *)malloc(sizeof(bitree));
tree=creat();
cengci(tree);
}
遍历方法从void cengci(bitree *t) 开始的 用队列方法遍猛野历的

阅读全文

与写出层次遍历二叉树的算法相关的资料

热点内容
算法战书籍 浏览:575
卸载网络服务器是什么意思 浏览:123
菜鸟app的收货地址在哪里 浏览:488
服务器配什么显卡 浏览:369
动态壁纸不动了是怎么回事安卓 浏览:412
申万宏源app哪里看总盈利 浏览:133
单片机测电感电容 浏览:165
android在子线程中更新ui 浏览:694
算法分析师面试有什么要求 浏览:994
容器算法大全图解 浏览:69
cad后置命令失效 浏览:692
杀手阻击存档文件夹是哪一个 浏览:212
禁书pdf 浏览:920
没用app语音智能提醒怎么设置 浏览:502
linuxwiki安装 浏览:680
隔墙算法 浏览:174
安卓手机为什么app不通知 浏览:550
申请云服务器购买费用 浏览:115
云服务器镜像下载到本地 浏览:4
电脑文件夹名有横杠 浏览:154