【算法学习笔记】二叉树遍历
来源:互联网 发布:永利国际中心 商业数据 编辑:程序博客网 时间:2024/05/20 03:42
一。 先序遍历
根结点->左子树->右子树
二。 中序遍历
左子树->根结点->右子树
只要知道根结点,就可以根据根结点在中序遍历序列中的位置区分出左子树和右子树
三。 后序遍历
左子树->右子树->根结点
四。 层序遍历
层序遍历相当于对二叉树从根结点开始的广度优先搜索。
栗子:
假设一棵二叉树结点的值都是正整数,给出该二叉树的中序序列和后序序列,请输出该二叉树的层次遍历序列。
代码实现:
#include <cstdio>#include <cstring>#include <queue>#include <algorithm>using namespace std;const int maxn = 50;struct node{int data;node* lchild;node* rchild;}; int pre[maxn], in[maxn], post[maxn]; //先序, 中序, 后序int n; //结点个数//当前二叉树的后序序列区间为[postL,postR],中序序列区间为[inL,inR]//create函数返回构建出的二叉树的根结点地址node* create(int postL, int postR, int inL, int inR) {if(postL > postR){return NULL; //后序序列长度小于等于0时,直接返回 }node* root = new node; //新建一个新的结点,用来存放当前二叉树的根结点root->data = post[postR]; //新结点的数据域为根结点的值int k;for(k = inL; k <= inR; k++){if(in[k] == post[postR]){ //在中序序列中找到in[k]==post[postR]的结点(根结点) break;}} int numLeft = k - inL; //左子树的结点个数//返回左子树的根结点地址,赋值给root的左指针root->lchild = create(postL, postL+numLeft-1, inL, k-1);//返回右子树的根结点地址,赋值给root的右指针root->rchild = create(postL + numLeft, postR-1, k+1, inR);return root; //返回根结点地址 }int num = 0; //已输出的结点个数void BFS(node* root){queue<node*> q; //注意队列里是存地址q.push(root); //将根结点地址入队while(!q.empty()){node* now = q.front(); //取出队首元素q.pop();printf("%d",now->data); //访问队首元素 num++;if(num < n) printf(" ");if(now->lchild != NULL) q.push(now->lchild); //左子树非空if(now->rchild != NULL) q.push(now->rchild); //右子树非空 } } int main(){scanf("%d", &n);for(int i = 0; i<n; i++){scanf("%d", &post[i]);} for(int i = 0; i<n; i++){scanf("%d", &in[i]); }node* root = create(0, n-1, 0, n-1); //建树BFS(root);return 0; }
运行结果:
阅读全文
2 0
- 【算法学习笔记】二叉树遍历
- 算法学习----二叉树的遍历
- [算法学习]输入遍历重建二叉树
- [学习笔记]二叉树的遍历
- 【学习笔记】二叉树非递归遍历
- Java学习笔记-二叉树的遍历
- 学习笔记:二叉树后序遍历非递归算法
- 算法学习笔记一:二叉搜索树的非递归遍历实现
- 【算法学习笔记】10.数据结构基础 二叉树初步练习3(遍历与递归复习)
- 算法学习笔记 二叉树和图遍历—深搜 DFS 与广搜 BFS
- 数据结构与算法学习笔记——二叉树遍历(一)(递归、迭代)
- 数据结构与算法学习笔记——二叉树遍历(二)(Morris Traversal)
- 算法学习笔记 二叉树和图遍历—深搜 DFS 与广搜 BFS
- 二叉树遍历算法
- 二叉树遍历算法
- 二叉树遍历算法
- 二叉树遍历算法
- 二叉树遍历算法
- 概率论基础之一:事件的概率
- bower 笔记
- mysql 外连接
- HDU
- 【学习笔记】设计模式-策略模式
- 【算法学习笔记】二叉树遍历
- python count()计算字符出现的频数
- 杭电ACM OJ 1026 Ignatius and the Princess I DFS+BFS
- 线程安全与锁优化(JVM)
- 小谈微习惯
- PHP 函数 数组引用传参数
- Binlog日志的三种模式介绍及模式修改
- 结合redis设计与实现的redis源码学习-12-RDB持久化(rdb.h/rio.h)
- 《机器学习》周志华第一章参考答案