二叉树的遍历 系统管理员 2022-02-01 00:43 209阅读 0赞 **遍历顺序** -------------------- ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0MzIyMzU3_size_16_color_FFFFFF_t_70] **规律:** <table> <thead> <tr> <th></th> <th></th> </tr> </thead> <tbody> <tr> <td>先序遍历</td> <td>当第一次遇见结点就输出</td> </tr> <tr> <td>中序遍历</td> <td>当第一次遇见结点时不输出,第二次遇见结点时就输出</td> </tr> <tr> <td>后序遍历</td> <td>在输出的时候判断一下子树结点是否全都输出,如果全都输出就可以输出此结点</td> </tr> </tbody> </table> -------------------- ##### 二叉树的递归遍历 ##### ###### 1、定义声明 ###### typedef struct TNode *Position; typedef struct TNode *BinTree; struct TNode{ ElemenType Data; BinTree left; BinTree right; }; -------------------- ###### 2、先序遍历(VLR) ###### void PreorderTraversal(BinTree BT) { if(BT) { printf("%d",BT->Data); PreorderTraversal(BT->left); PreorderTraversal(BT->right); } } -------------------- ###### 3、中序遍历(LVR) ###### void InorderTraversal(BinTree BT) { if(BT) { InorderTraversal(BT->left); printf("%d",BT->Data); InorderTraversal(BT->right); } } -------------------- ###### 4、后序遍历(LRV) ###### void PostorderTraversal(BinTree BT) { if(BT) { PostorderTraversal(BT->left); PostotderTraversal(BT->right); printf("%d",BT->Data); } } -------------------- ##### 二叉树的非递归遍历 ##### ###### > ###### ###### 中序遍历 ###### 使用堆栈,中序遍历正好符合先进后出规则 ![在这里插入图片描述][20190513112141415.PNG] void InorderTraversal(BinTree BT) { BinTree T=BT; stack S=CreatStack(); while(T||!IsEmpty(S))//如果树未遍历完或堆栈不为空 { while(T)//先访问左边,遇到就把它压栈 { Push(S,T->Data); T=T->left; } if(!IsEmpty(S)) { T=Pop(S); printf("%d",T->Data); T=T->right; } } } -------------------- ###### 先序遍历非递归算法 ###### 相对于中序遍历,只是将输出位置改到上面就行 void PreorderTraversal(BinTree BT) { BinTree T=BT; stack S=CreatStack(); while(T||!IsEmpty(S))//如果树未遍历完或堆栈不为空 { while(T)//先访问左边,遇到就把它压栈 { printf("%d",T->Data); Push(S,T->Data); T=T->left; } if(!IsEmpty(S)) { T=Pop(S); T=T->right; } } } -------------------- ###### 后序遍历非递归算法O(参考别人的)—only了解 ###### typedef struct BiTNode{ int data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; typedef struct{ BiTree data[100]; int top; }BiStack; void PostOrder(BiTree T){ //入栈所有的左子树以及左子树的右子树直到没有可以访问的右子树后退栈。 BiTNode *pre = T; //记录上一次退栈的结点 BiTNode *p=T; //当前访问结点 BiStack s ; //保存结点用的栈 s.top=0; //栈底预留,用于保存NULL结束算法。 s.data[s.top]=NULL; while(p||s.top!=0){ if(p!=NULL&&pre!=p->lchild&&pre!=p->rchild){ //结点不为空且左孩子和右孩子没有访问过 ,入栈左子树 s.data[++s.top]=p; p=p->lchild; } else{ p=s.data[s.top]; if(p->rchild!=NULL&&pre!=p->rchild){ //右子树不为空且右孩子没有访问过,入栈右子树结点 p=p->rchild; } else{ printf("%d ",p->data); //访问到最后的右子树的结点后,退栈。 pre=s.data[s.top]; p=s.data[--s.top]; } } } } -------------------- ##### 层序遍历队列实现 ##### ![在这里插入图片描述][20190513214730320.PNG] void LevelorderTraversal(BinTree BT) { Queue Q; BinTree T; Q=CreatQueue(); if(!BT) return ;//如果是空树 Add(Q,BT); while(!IsEmpty(Q)) { T=Delete(Q); printf("%d",T->Data); if(T->left) Add(Q,T->left); if(T->right) Add(Q,T->right); } } [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0MzIyMzU3_size_16_color_FFFFFF_t_70]: /images/20220201/9b136ee6158c4a2fb220285d7b918306.png [20190513112141415.PNG]: /images/20220201/6ac88ea3e02540a0b4f72ece470d7dc9.png [20190513214730320.PNG]: /images/20220201/ebe662132d7044dda7ba6bb06c4b21c0.png
相关 二叉树 二叉树遍历 通过二叉树遍历求得二叉树 什么是二叉树 > > 二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且 偏执的太偏执、/ 2022年12月04日 01:08/ 0 赞/ 282 阅读
相关 遍历二叉树 1. 二叉树的遍历 遍历定义 ——顺着某一条搜索路径巡访二叉树中的结点,使得 每个结点均被访问一次,而且仅被访问一次。 “访问”的含义可以很广,如:输出结点的信息等。 迈不过友情╰/ 2022年08月22日 14:26/ 0 赞/ 415 阅读
相关 遍历二叉树 遍历二叉树 二叉树是由3个基本单元组成的:根结点、左子树和右子树。 若限定先左后右的顺序,则遍历二叉树只有三种情况分别称为先(根)序遍历、中(根)序遍历和后(根)序遍 比眉伴天荒/ 2022年06月08日 00:48/ 0 赞/ 275 阅读
相关 遍历二叉树 遍历二叉树 今天我们学习了二叉树,现在我就基于二叉树的递归定义来说一说遍历二叉树的三种方法:先序、中序和后序。 根据二叉树的递归定义可知,二叉树是由3个基本单元组成:根结点 傷城~/ 2022年06月05日 08:11/ 0 赞/ 330 阅读
相关 二叉树遍历 include<iostream> include<queue> using namespace std; //二叉树结点 ╰+攻爆jí腚メ/ 2022年06月04日 05:35/ 0 赞/ 270 阅读
相关 二叉树遍历 前序遍历(左中右)ABDGHCEIF ![前序遍历][70] 中序遍历(左根右)GDHBAEICF![中序遍历][70 1] 后序遍历(左右根)GHDBIEFCA![ Bertha 。/ 2022年05月11日 13:48/ 0 赞/ 338 阅读
相关 二叉树遍历 二叉树:二叉树是每个节点最多有两个子树的树结构。 本文介绍二叉树的遍历相关知识。 我们学过的基本遍历方法,无非那么几个:前序,中序,后序,还有按层遍历等等。 设L、D、R 痛定思痛。/ 2022年05月10日 06:24/ 0 赞/ 209 阅读
相关 二叉树遍历 二叉树是数据结构中很重要的一个章节,很多同学反应很难,今天我就把我平时的经验给大家讲解一下,今天讲一下二叉树的遍历 工具/原料 ● 数据结构知识 ● 了解树的定义 爱被打了一巴掌/ 2022年05月10日 03:08/ 0 赞/ 295 阅读
相关 遍历二叉树 用递归的方法实现前序遍历,中序遍历,后序遍历: 用递归的方法遍历的时候,其实每个节点都遍历了三遍,根据打印时间的不同,即可实现前序中序及后续,这就是三个遍历代码一样而打印顺序 浅浅的花香味﹌/ 2021年11月01日 15:28/ 0 赞/ 439 阅读
还没有评论,来说两句吧...