二叉树的遍历

来源:互联网 发布:腾讯大数据 会 11.22 编辑:程序博客网 时间:2024/06/09 16:37

假设有一颗这样的二叉树,该结构如图:
这里写图片描述
中序遍历:其遍历顺序为左——根——右,其上面二叉树的中序遍历的输出结果为:A/B*C*D+E,整个遍历过程函数调用了19次。
前序遍历:其遍历顺序为根——左——右,其上面二叉树的前序遍历的输出结果为:+/ABCDE,整个遍历过程函数也被调用了19次。**
后序遍历:其遍历顺序为左——右——根,其上面二叉树的后序遍历的输出结果为:AB/C*D*E+,整个遍历过程函数也被调用了19次。
上面三种遍历都是按照递归的方式遍历,其实我们可以用栈数据结构模拟上面的三种遍历模式,就拿中序遍历来说,其相当于左结点一直在进栈,直到遇到空结点,然后再把其栈顶的结点弹出栈,再让遍历其右儿子。
层序遍历:其遍历顺序为自上而下,自左而右地遍历每一层的结点,其上面二叉树的层次遍历输出结果:+*E*D/CAB,可以用一个队列来保存其遍历顺序,首先根结点入队,然后再其左结点入队,再其右结点入队,让后弹出对头的元素,再继续重复前面的操作,直到队列为空。
代码实现:

#include <iostream>#include<stdio.h>#include<stack>#include<queue>using namespace std;typedef struct node *tree_pointer;struct node{   int data;   tree_pointer left_child,right_child;};//中序遍历void inorder(tree_pointer ptr){   if(ptr)   {      inorder(ptr->left_child);      printf("%d",ptr->data);      inorder(ptr->right_child);   }}//前序遍历void preorder(tree_pointer ptr){   if(ptr)   {       printf("%d",ptr->data);      inorder(ptr->left_child);      inorder(ptr->right_child);   }}//后序遍历void postorder(tree_pointer ptr){   if(ptr)   {      inorder(ptr->left_child);      inorder(ptr->right_child);      printf("%d",ptr->data);   }}//中序迭代遍历void iter_inorder(tree_pointer node){   stack<tree_pointer> tree;   for(;;)   {      //该节点的所有左结点进栈      for(;node;node=node->left_child)         tree.push(node);      node=tree.top();      //删除栈顶元素      tree.pop();      if(!node) break;      printf("%d",node->data);      //遍历树的右儿子      node=node->right_child;   }}//二叉树层次遍历void level_order(tree_pointer ptr){   queue<tree_pointer> tree;   if(!ptr) return;   tree.push(ptr);   for(;;)   {      ptr=tree.front();      //删除队头元素      tree.pop();      if(ptr)      {         printf("%d",ptr->data);         //左结点入队         if(ptr->left_child)            tree.push(ptr->left_child);         //右结点入队         if(ptr->right_child)            tree.push(ptr->right_child);      }      else         break;   }}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 毛风衣叠久了怎么办 黑色的衣服沾毛怎么办 雪纺裙子弄上油怎么办 内衣买小了怎么办妙招 长裤衬衫裙邹了怎么办 100棉衬衣皱了怎么办? 短袖t恤袖口大了怎么办 短袖底下卷边了怎么办 棉质短袖衫缩水怎么办 纯棉t恤缩水了怎么办 t恤缩水变小了怎么办 衣服掉在雨棚上怎么办 车衣密码锁忘记密码怎么办 衣服的铁拉链弯怎么办 去旅行衣服皱了怎么办 衣服抽绳出来了怎么办 裤子的绑带掉了怎么办 网纱裙的边卷了怎么办 堵奶宝宝吸不通怎么办 棉麻裙子掉毛怎么办 10个月宝宝吃手怎么办 婴儿连体衣长了怎么办 冰丝面料变长了怎么办 t恤袖口大了怎么办 长袖t恤袖子长了怎么办 机打的扣子掉了怎么办 四个月宝宝头扁怎么办 鞋子前面穿翘了怎么办 休完产假没人带怎么办 休完产假孩子吃奶怎么办 巴布豆童鞋里面臭了到底怎么办 连体裤有点卡档怎么办 宝宝连体衣扣子掉了怎么办 买衣服被骂了怎么办? 把人车刮了跑了怎么办 打工打不下去了怎么办 白色衣服变粉了怎么办 一量血压就紧张怎么办 一紧张就血压高怎么办 不在上班时间在单位受伤怎么办 生活过得太压抑怎么办