如何实现二叉树的遍历?

作者&投稿:謇秀 (若有异议请与网页底部的电邮联系)
实现二叉树的各种遍历方法~


3. 根据建立的二叉树的二叉链存贮结构,进行二叉树的遍历,输出相应序列

二叉树的遍历
在遍历二叉树的过程中,一般先遍历左子树,再遍历右子树。
(1)前序遍历
先访问根结点,然后遍历左子树,最后遍历右子树;并且在遍历左、右子树时,仍需先访问根结点,然后遍历左子树,最后遍历右子树。
(2)中序遍历
先遍历左子树、然后访问根结点,最后遍历右子树;并且,在遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。
(3)后序遍历
先遍历左子树、然后遍历右子树,最后访问根结点;并且,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后访问根结点。

在vc6.0环境下实现,代码如下,这些算法方面的建议还是找本书看看好:
#include<stdio.h>
#include<malloc.h>
typedef struct Node
{
char data;
struct Node *lchild;
struct Node *rchild;
}BiTreeNode;
BiTreeNode *CreatBiTree(BiTreeNode *t,char *s)//二叉树的创建
{
BiTreeNode *p[1024];
BiTreeNode *q=NULL;
int top=0;
int i=0,j,len=0;
char ch;
ch=s[i];
while(ch!='\0')
{
switch(ch)
{
case '(':
top++;
p[top]=q;
j=1;
break;
case ')':
top--;
break;
case ',':
j=2;
break;
default:
q=(BiTreeNode *)malloc(sizeof(BiTreeNode));
q->data=ch;
q->lchild=q->rchild=NULL;
if(t==NULL)
t=q;
else
{
switch(j)
{
case 1:
p[top]->lchild=q;
break;
case 2:
p[top]->rchild=q;
break;
}
}
}
i++;
ch=s[i];
}
return t;
}
void PreOrder(BiTreeNode *t)//先序遍历
{
if(t!=NULL)
{
printf("%c ",t->data);
PreOrder(t->lchild);
PreOrder(t->rchild);
}
}
void InOrder(BiTreeNode *t)//中序遍历
{
if(t!=NULL)
{
PreOrder(t->lchild);
printf("%c ",t->data);
PreOrder(t->rchild);
}
}
void PostOrder(BiTreeNode *t)//后序遍历
{
if(t!=NULL)
{
PreOrder(t->lchild);
PreOrder(t->rchild);
printf("%c ",t->data);
}
}
int BiTreeDepth(BiTreeNode *t)
{
int dep=0,depl,depr;
if(!t)
dep=0;
else
{
depl=BiTreeDepth(t->lchild);
depr=BiTreeDepth(t->rchild);
dep=1+(depl>depr?depl:depr);
}
return dep;
}
void main()
{
BiTreeNode *t=NULL;
char *s="a(b(d,e),c)";
t=CreatBiTree(t,s);
printf("先序遍历:");
PreOrder(t);
printf("\n");
printf("中序遍历:");
InOrder(t);
printf("\n");
printf("后序遍历:");
PostOrder(t);
printf("\n");
printf("二叉树深度为%d\n",BiTreeDepth(t));
}

二叉树的遍历分好几种
1:先根遍历
2:中根遍历
3:后根遍历
主要就是用递规的思想.
要代码的话追问吧


实现二叉树的各种遍历方法
二叉树有三种遍历方法,先序遍历,首先访问根,再先序遍历左子树,最后先序遍历右子树。中序遍历,首先中序遍历左子树,再访问根,最后遍历右子树。后序遍历,首先后序遍历左子树,再后序遍历右子树,最后访问根。

二叉树的遍历是怎样实现的?
前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。若二叉树为空则结束返回。因此,A是根结点,B是A的左子树,F是A的右子树。E是B的左子树,C是B的右子树,...

二叉树如何遍历?
已知一棵二叉树的中序序列为CBEDAHGIJF,后序序列为CEDBHJIGFA,构造此二叉树如下:从后序的根为A,回到中序将其切分成3部分,重复这个过程即可还原,如图所示。

七种方式遍历二叉树
了解二叉树的遍历方式,这里有七种方法值得掌握:首先,递归的先序遍历,其思路清晰,无需赘述。其次,递归的中序遍历,递归过程中,节点的访问顺序决定其特征。紧接着,递归的后序遍历,非递归实现时,借助栈可以巧妙地模拟节点的访问顺序,但后序遍历的实现稍显复杂,需要记录节点被访问次数。非递归的...

如何遍历二叉树?
先序遍历二叉树规则:根-左-右 1、访问根结点;2、先序遍历左子树;3、先序遍历右子树。中序遍历二叉树规则:左-根-右 1、先中序遍历左子树;2、再访问根节点;3、最后访问中序遍历右子树。后序遍历二叉树规则:左-右-根 1、后序遍历左子树;2、后序遍历右子树;3、访问根结点。

Python实现二叉树的遍历
宽度优先遍历,也称为层次遍历(BFS),按照从上到下、从左到右的顺序访问节点,这是一种非递归的方式,通常通过队列来实现。例如,自顶向下的遍历顺序为:5-3-7-2-4-6。通过这些方法,我们可以有效地访问和操作二叉树中的数据,无论是查找、插入还是删除节点,二叉树的遍历都是基础且至关重要的...

C语言中如何实现二叉树的创建和不同遍历方法?
深入理解二叉树的遍历,让我们通过C语言实现非递归遍历算法,首先,定义结构体和基本函数如下:<stdio.h>#include <stdlib.h>typedef struct { int data; struct node *lchild, *rchild;} treetp, tree;<\/函数`create(treetp t, int c)`用于创建新的节点,输入节点和整数:treetp create(tr...

怎么遍历二叉树?
1)先序遍历,按照根左右的顺序沿一定路径经过路径上所有的结点。在二叉树中,先根后左再右。2)中序遍历,首先遍历左子树,然后访问根结点,最后遍历右子树。3)后序遍历,可记做左右根。在二叉树中,先左后右再根,即首先遍历左子树,然后遍历右子树,最后访问根结点。4)这棵二叉树的根节点是A...

二叉树如何遍历?
层次遍历EAFBHDGICKJ。后序遍历CDBAGJKIHFE。画法:根E,E左A右F,A右B,B右D。先看先序,其第一个为专树的根,属先序遍历是先根再左子树最后右子树,第一个肯定是树的根,先画A,A再中序遍历中左右都有,说明A有左子树也有右子树。

二叉树的遍历
1.遍历方案 从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作: (1)访问结点本身(N), (2)遍历该结点的左子树(L), (3)遍历该结点的右子树(R)。以上三种操作有六种执行次序: NLR、LNR、LRN、NRL...

房县17396577534: 二叉树的遍历? -
绽凡耐邦: 遍历方案从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成.因此,在任一给定结点上,可以按某种次序执行三个操作:(1)访问结点本身(N),(2)遍历该结点的左子树(L),(3)遍历该结点的右子树(R)...

房县17396577534: 二叉树遍历方法技巧? -
绽凡耐邦: 很简单,就是一个递归过程.在函数中以先序遍历的第一个结点在中序遍历中为界把中序遍历分为两半,再分别把左一半和右一半作为这个结点的左子树和右子树进行递归.完成递归之后再打印该结点即可.结束递归的条件是左子树或右子树没...

房县17396577534: 数据结构二叉树怎么遍历啊?? -
绽凡耐邦: 拿先序遍历举例: 先序遍历 是根左右 先遍历根A,然后遍历A的左子树(是左面那一群),然后遍历A的右子树(为空). 在A的左子树中,先遍历根也就是B,在遍历B的左子树也就是C,在遍历B的右子树,是右边的一群. 在B的右子树中继续…………

房县17396577534: 二叉树的遍历操作实现 -
绽凡耐邦: // S_lbecs.cpp : 定义控制台应用程序的入口点.//链表二叉树的定义和操作#include "stdafx.h"#include "stdio.h"#include "malloc.h"#include "string.h"#include "stdlib.h"#define Max 20 //最大节点个数 typedef struct node{ char data; ...

房县17396577534: 二叉树遍历程序 -
绽凡耐邦: 二叉树的遍历有3种方式: a/ \/ \b e/ \ \/ \ \c d f(先序)先根遍历:(根左右)先访问根,再访问左子树,最后访问右子树,则可得如下的序列:abcdef(中序)中根遍历:(左根右)先访问左子树,再访问根,最后访问右子树,则可得...

房县17396577534: 二叉树遍历(c语言实现) -
绽凡耐邦: #include <stdio.h>#include <malloc.h> typedef struct node{ int data; struct node *lchild,*rchild; }*treetp,tree; treetp create (treetp t,int c); void print1(treetp); void print2(treetp); void print3(treetp); int number=0; void main() { treetp t=0,r;r=create (t,0);...

房县17396577534: 实现二叉树的各种遍历方法 -
绽凡耐邦: #include <stdlib.h> struct tree /* 树的结构宣告 */ { int data; /* 节点数据 */ struct tree *left; /* 指向左子树的指标 */ struct tree *right; /* 指向右子树的指标 */ }; typedef struct tree treenode; /* 树的结构新型态 */ typedef treenode *btree; /* 宣告树...

房县17396577534: 如何编写一个二叉树的遍历 -
绽凡耐邦: void PreOrder(BiTree T, Status ( *Visit ) (ElemType e)) { // 基于方法一,流程图如右,当型循环 InitStack(S); while ( T!=NULL || !StackEmpty(S)){ while ( T != NULL ){ Visit(T->data) ; Push(S,T); T = T->lchild; } if( !StackEmpty(S) ){ Pop(S,T); T = T->...

房县17396577534: 二叉树的遍历算法 -
绽凡耐邦: 怎么又来问了,不是回答过你了吗?很简单,就是一个递归过程.在函数中以先序遍历的第一个结点在中序遍历中为界把中序遍历分为两半,再分别把左一半和右一半作为这个结点的左子树和右子树进行递归.完成递归之后再打印该结点即可....

房县17396577534: 怎么用c语言实现二叉树的遍历 -
绽凡耐邦: 这是用广义表建立二叉树并先序和中序遍历二叉树#include <stdio.h> #include <stdlib.h> #define MaxSize 100 typedef struct node { char data; struct node *lchild; struct node *rchild; }BTNode,*BiTree; void creategeneralizelist(BiTree *b,char *str) { ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网