急求,关于树的遍历的三种遍历的代码

作者&投稿:弘物 (若有异议请与网页底部的电邮联系)
编程中的树的遍历分为哪三种?~


二叉树的遍历分为前序、中序和后序遍历这三种。

本贴给出二叉树先序、中序、后序三种遍历的非递归算法,此三个算法可视为标准算法,直接用于考研答题。

1.先序遍历非递归算法
#define maxsize 100
typedef struct
{
Bitree Elem[maxsize];
int top;
}SqStack;

void PreOrderUnrec(Bitree t)
{
SqStack s;
StackInit(s);
p=t;

while (p!=null || !StackEmpty(s))
{
while (p!=null) //遍历左子树
{
visite(p->data);
push(s,p);
p=p->lchild;
}//endwhile

if (!StackEmpty(s)) //通过下一次循环中的内嵌while实现右子树遍历
{
p=pop(s);
p=p->rchild;
}//endif

}//endwhile

}//PreOrderUnrec

2.中序遍历非递归算法
#define maxsize 100
typedef struct
{
Bitree Elem[maxsize];
int top;
}SqStack;

void InOrderUnrec(Bitree t)
{
SqStack s;
StackInit(s);
p=t;
while (p!=null || !StackEmpty(s))
{
while (p!=null) //遍历左子树
{
push(s,p);
p=p->lchild;
}//endwhile

if (!StackEmpty(s))
{
p=pop(s);
visite(p->data); //访问根结点
p=p->rchild; //通过下一次循环实现右子树遍历
}//endif

}//endwhile

}//InOrderUnrec

3.后序遍历非递归算法
#define maxsize 100
typedef enum{L,R} tagtype;
typedef struct
{
Bitree ptr;
tagtype tag;
}stacknode;

typedef struct
{
stacknode Elem[maxsize];
int top;
}SqStack;

void PostOrderUnrec(Bitree t)
{
SqStack s;
stacknode x;
StackInit(s);
p=t;

do
{
while (p!=null) //遍历左子树
{
x.ptr = p;
x.tag = L; //标记为左子树
push(s,x);
p=p->lchild;
}

while (!StackEmpty(s) && s.Elem[s.top].tag==R)
{
x = pop(s);
p = x.ptr;
visite(p->data); //tag为R,表示右子树访问完毕,故访问根结点
}

if (!StackEmpty(s))
{
s.Elem[s.top].tag =R; //遍历右子树
p=s.Elem[s.top].ptr->rchild;
}
}while (!StackEmpty(s));
}//PostOrderUnrec


一道关于二叉树遍历的题目
回答:详情请查看视频回答

一道关于二叉树遍历序列的题
可以判断根节点c,无右子树,在判断出e也是接点,你可以试着划一下,只要顺序不错,就可以做出,这类题,关键在于确定接点位置,前序遍历就很简单了:cedba

问个关于二叉树遍历的问题
大概1分钟多点吧,把四个答案代进去,先以A为例,1 2 4 5 6 3 7这是先序,就是说1是根结点,在A中4 2 6 5就是以1为父母结点的左子树结点,先序遍历第二个为2,即有4为以2为父母结点的左子树结点,6 5为右子树结点,其余同理可得,这样可以快速构建一颗二叉树,然后对比,大概一个选项...

关于二叉树遍历的问题
根据先序序列52143687IKJ,得知5是根结点.根据中序序列12345678IJK,得知1234是根结点5的左子树,678IJK是根结点5的右子树.画出二叉树: 5 \/ \\ 2 6 \/ \\ \\ 1 4 8 \/ \/ \\ 3 7 I \\ K \/ J后序序列是13427JKI865\/\/C语言测试程序#incl...

下列关于二叉树遍历的说法正确的有 (多选)
1 只有空二叉树和一个根结点的二叉树这两种二叉树的中序和后序遍历的顺序恰好一样 这种说法是错误的,如果一棵二叉树所有的结点均无右孩子,中序和后序遍历的顺序恰好一样。2.所有结点左子树为空的二叉树的中序和后序遍历顺序恰好一样。这种说法是错误的,理由见1.3所有结点右子树为空的二叉树的...

关于二叉树的递归遍历还是不理解 那位高手能不能详细讲一下!!!_百度...
例如:先序遍历 1、首先访问根节点A,然后接下来要去访问它的左子树 2、将它的左子树当成一棵完整的二叉树:B \/ \\ D E 这个你要采用先序来进行遍历的话,还是先遍历根节点,然后左子树,然后右子树。那么这个时候必定要先访问根节点B了。3、再将B的左子树当成一棵新的二叉树:D 由于其没有...

关于数据结构中的树的遍历请教一下
答案是-+a*bc\/de 自己画了个不标准的图

什么是二叉树数的遍历
二叉树遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题。遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。遍历方案 从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此...

二叉树遍历算法,就是给定两种遍历结果求另一种遍历顺序
类似地,由右子树的前序可知右子树的根为C,于是右子树的中序也被切分为三部分:右子树的左子树为空,右子树的根C,右子树的左子树的中序HF 继续切分下去:GE的根为E、HF的根为F,直到每棵子树只有一个结点为止,最终得到的完整二叉树如下:于是后序遍历序列为:DGEBHFCA ...

求一个二叉树遍历的C语言程序,改程序包含6个算法。
void xianxu(Bitree T){if(T){printf("%c",T->Data);xianxu(T->left);xianxu(T->right);}}void zhongxu(Bitree T){if(T){zhongxu(T->left);printf("%c",T->Data);zhongxu(T->right);}}void houxu(Bitree T){if(T){houxu(T->left);houxu(T->right);printf("%c",T-...

开远市18712204469: 急求,关于树的遍历的三种遍历的代码 -
谈溥舒止: 本贴给出二叉树先序、中序、后序三种遍历的非递归算法,此三个算法可视为标准算法,直接用于考研答题.1.先序遍历非递归算法#define maxsize 100 typedef struct { Bitree Elem[maxsize]; int top; }SqStack; void PreOrderUnrec(Bitree t) { ...

开远市18712204469: 计算机数据结构中树的遍历 -
谈溥舒止: 你应该是说二叉树吧,它的遍历分为前序遍历,中序遍历,后序遍历. 我假设树中存储的是字符,我们遍历并输出,给出示例代码: /*tree的前序遍历*/ int PreTrav(Tree T) { if(T==NULL)return 0; printf("%c",T->Value); PreTrav(T->Left); PreTrav(...

开远市18712204469: 编程中的树的遍历分为哪三种? -
谈溥舒止: ① NLR:前序遍历(PreorderTraversal亦称(先序遍历)) ——访问根结点的操作发生在遍历其左右子树之前. ② LNR:中序遍历(InorderTraversal) ——访问根结点的操作发生在遍历其左右子树之中(间). ③ LRN:后序遍历(PostorderTraversal) ——访问根结点的操作发生在遍历其左右子树之后. 注意:由于被访问的结点必是某子树的根,所以N(Node)、L(Left subtree)和R(Right subtree)又可解释为根、根的左子树和根的右子树.NLR、LNR和LRN分别又称为先根遍历、中根遍历和后根遍历.

开远市18712204469: 数据结构的二叉树的遍历 -
谈溥舒止: 三种遍历:1、先根遍历,根→左→右;2、中根遍历,左→根→右;3、后根遍历,左→右→根; 限于字数,代码发不上来,要代码百度Hi我

开远市18712204469: 求数据结构中二叉树的遍历的代码,谢谢 -
谈溥舒止: 展开全部#include #include #include #include #include #define SIZE 100 using namespace std; typedef struct BiTNode // 定义二叉树节点结构 {char data; // 数据域 struct BiTNode *lchild,*rchild; // 左右孩子指针域 }BiTNode,*BiTree; int visit(...

开远市18712204469: 谁能帮我写一下二叉树的三种遍历代码 并且描述一下算法 -
谈溥舒止: typedef struct BTNode { ElemType data ; struct BTNode *Lchild , *Rchild ; }BTNode ; 1 先序递归算法 算法的递归定义是: 若二叉树为空,则遍历结束;否则 ⑴ 访问根结点;⑵ 先序遍历左子树(递归调用本算法);⑶ 先序遍历右子树(递归调用...

开远市18712204469: 二叉树遍历程序 -
谈溥舒止: 二叉树的遍历有3种方式: a / \ / \ b e / \ \ / \ \ c d f (先序)先根遍历:(根左右)先访问根,再访问左子树,最后访问右子树,则可得如下的序列:abcdef (中序)中根遍历:(左根右)先访问左子树,再访问根,最后访问右子树,则可得如下...

开远市18712204469: 创建二叉树和实现二叉树的三种遍历 -
谈溥舒止: 其实这个程序很简单的. 代码如下: #include #include #define MAX_TREE_SIZE 100 typedef struct { int i; }TElemType; typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; int CreateBiTree(BiTree &T) { char ch; ...

开远市18712204469: 求一个关于二叉树遍历的程序 -
谈溥舒止: 运行结果: n = 3 1:先序遍历: 2:中序遍历: 3:后序遍历: 4:层序遍历: 0:退出 选择____1 先序遍历: ABDECFG 1:先序遍历: 2:中序遍历: 3:后序遍历: 4:层序遍历: 0:退出 选择____2 中序遍历: DBEAFCG 1:先序遍历...

开远市18712204469: 求完整的树的遍历的程序 -
谈溥舒止: } return t;data); Nodenum(T-> t-> } } //rchild);rchild!=NULL) { q[j]=p->rchild,&x)!=NULL) { i=1; q[i]=p; if(ldep>rdep) { return ldep+1; } else { return rdep+1; } } } //凹入法显示二叉树 void ShowTree(BT *T) { BT *stack[Max],*p; int level[Max][2],top,n,i,width=4...

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