先序、中序、后序遍历(三种情况访问二叉树)
来源:互联网 发布:零基础 学python 书 编辑:程序博客网 时间:2024/05/29 23:44
昨天才写了篇关于二叉排序树的博客,想起之前有所遗漏,如先序,中序以及后序遍历;
先序遍历:也叫做先根遍历,前序遍历,可记做根左右(二叉树父结点向下先左后右)。首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树,如果二叉树为空则返回。
即:若二叉树为空则结束返回,否则:(1)访问根结点(2)先序遍历左子树(3)先序遍历右子树
中序遍历:首先遍历左子树,然后访问根结点,最后遍历右子树。在遍历左、右子树时,仍然先遍历左子树,再访问根结点,最后遍历右子树。
即:若二叉树为空则结束返回,否则:(1)中序遍历左子树(2)访问根结点(3)中序遍历右子树
后序遍历:首先遍历左子树,然后遍历右子树,最后遍历访问根结点,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后遍历根结点。
即:若二叉树为空则结束返回,否则:(1)后序遍历左子树(2)后序遍历右子树(3)访问根结点
主要思想如上所述,将上篇二叉搜索树修改如下(当然其中的查找等操作已删除):
#include <iostream>#include <cstdio>#include <cstdlib>using namespace std;typedef int ElemType;typedef struct Node{ ElemType key; //关键字 struct Node *left; //左孩子 struct Node *right; //右孩子 struct Node *parent; //父节点} Node, *PNode;//插入void Insert(PNode &root, ElemType key){ //初始化b被插入结点 PNode p=(PNode)malloc(sizeof(Node)); p->key = key; p->left = NULL; p->right = NULL; p->parent = NULL; //空树 if(root == NULL) { root = p; return; } //左孩子 if(root->left == NULL && root->key > key) { p->parent = root; root->left = p; return; } //右孩子 if(root->right == NULL && root->key < key) { p->parent = root; root->right = p; return; } //关键值小于此时的节点值,放在左树 //准备改回迭代的,今晚没成功... if(key < root->key) Insert(root->left,key); else Insert(root->right,key);}//创建树void Create(PNode& root, ElemType *keyArray, int length){ for(int i = 0; i < length; i++) Insert(root, keyArray[i]); //插入}void PreOrder(PNode root) //先序遍历{ if(root != NULL) { cout<<root->key<<" "; PreOrder(root->left); PreOrder(root->right); }}void InOrder(PNode root) //中序遍历{ if(root != NULL) { InOrder(root->left); cout<<root->key<<" "; InOrder(root->right); }}void PostOrder(PNode root) //后序遍历{ if(root != NULL) { PostOrder(root->left); PostOrder(root->right); cout<<root->key<<" "; }}int main(){ PNode root = NULL; ElemType nodeArray[11] = {15, 6, 18, 3, 7, 17, 20, 2, 4, 13, 9}; //二叉数 Create(root, nodeArray, 11); //创建二叉搜索数 cout<<"先序遍历:"; PreOrder(root); cout<<endl; cout<<"中序遍历:"; InOrder(root); cout<<endl; cout<<"后序遍历:"; PostOrder(root); cout<<endl; return 0;}建树如下:
遍历情况如下:
o(∩_∩)o
2 0
- 先序、中序、后序遍历(三种情况访问二叉树)
- 二叉树的创建与三种遍历(先序,中序,后序)
- 二叉树递归的创建及三种遍历(先序、中序、后序)
- 用Java语言实现二叉树的三种遍历(先序、中序、后序遍历)
- 有关二叉树的三种遍历方式------先序,中序,后序
- 二叉树 (先序,中序,后序遍历 )
- 二叉树遍历(中序,先序->后序;中序,后序->先序)
- 二叉树先(中)(后)序遍历
- 二叉树的遍历(1)--先序遍历,中序遍历,后序遍历
- 二叉树的遍历代码(先序遍历,中序遍历,后序遍历)
- Java二叉树(三)--非递归的中序_先序_后序遍历二叉树
- 二叉树重建 - (先序遍历、中序遍历、后序遍历)
- 创建一个二叉树(先序遍历、中序遍历、后序遍历)
- 二叉树T 的先序遍历、中序遍历、后序遍历(递归实现)
- 先序遍历、中序遍历、后序遍历(二叉树)
- 二叉树(先序创建,递归先序,中序,后序遍历)-----1
- java实现二叉树的构建以及三种遍历方法(先序遍历,中序遍历,后续遍历)
- 二叉树的遍历(先序、中序、后序)
- 关于Go语言中defer关键字
- issu3.6 sdk 试玩
- 如何使用命令行来运行程序
- Android Bitmap和Canvas学习笔记
- 在Karaf上实现数据持久化(OpenJPA)
- 先序、中序、后序遍历(三种情况访问二叉树)
- 在线预览office文档
- 写给现在的自己
- Android中shape和selector和layer-list
- 文件系统操作
- 自定义CreateUserWizard控件(转载)
- Oracle with 语句详解
- ThinkPHP微信demo实例
- 高级oracle之JOB实例