二叉树三种顺序遍历应用
2012-08-13 21:06
330 查看
1.非递归,不允许用栈,求前序遍历最后一个结点
思想:前序遍历最后一个结点:若有右子树,则为右子树最右下结点,若有左子树,则为左子树最右下结点,否则为根结点。
2.满二叉树后序转化为前序递归
思想:对于满二叉树,根据任意一个遍历可将其转化为其他遍历
思想:前序遍历最后一个结点:若有右子树,则为右子树最右下结点,若有左子树,则为左子树最右下结点,否则为根结点。
#include "stdafx.h" #include<iostream> using namespace std; typedef struct BTreeNode { int data; struct BTreeNode *lchild,*rchild; }BTree; int _tmain(int argc, _TCHAR* argv[]) { return 0; } BTree *LastNode(BTree *b) { BTree *p=b; if(p==NULL)return NULL; else while(p) { if(p->rchild)p=p->rchild; else if(p->lchild)p=p->lchild; else return p; } }
2.满二叉树后序转化为前序递归
思想:对于满二叉树,根据任意一个遍历可将其转化为其他遍历
BTree PostToPre(int post[],int pre[],int l1,int h1,int l2,int h2)//后转前,l1,h1,l2,h2分别为序列初始后结束结点下标 { if(h1>l1) { pre[h2]=post[h1];//根结点 int half=(h1-l1)/2;//左子树或右子树的结点数 PostToPre(post,pre,l1,l1+half-1,l2+1,l2+half);//左子树后序转前序 PostToPre(post,pre,l1+half,h1-1,l2+half+1,h2);//右子树后序转前序 } }
相关文章推荐
- 数据结构学习之-二叉树的三种递归遍历C++实现及相关应用
- 二叉树的三种遍历的应用(表达式,求深度,叶子数,结点数,二叉树的建立,复制)
- 二叉树三种遍历方法(根据两种排序求第三种的顺序)
- 二叉树三种顺序遍历板子
- 1489 求二叉树的先序遍历 1291 数据结构上机测试4.1:二叉树的遍历与应用1【二叉树遍历顺序转换】
- 二叉树的三种遍历的应用(表达式,求深度,叶子数,结点数,二叉树的建立,复制)
- 二叉树用数组顺序存储(完全二叉树)并实现三种遍历,代码详解!!!
- leetcode105 && leetcode106 && PAT 1138. 二叉树的三种遍历的应用
- 二叉树的顺序存储和三种遍历(二)
- 按层次顺序(同一层自左至右)遍历二叉树的算法
- 二叉树的三种遍历(C语言写的)
- 二叉树的遍历及应用
- 数据结构--二叉树--输出树中从根到每个叶子节点的路径(树遍历算法的应用) .
- 看懂二叉树的三种遍历
- 二叉树三种遍历的非递归算法
- 二叉树三种遍历的非递归算法
- 初识树结构,简单模拟无规律的二叉树,实现二叉树的构建,计算树的深度以及三种遍历方式以及搜索删除,销毁整个树
- 二叉树操作之三种遍历方法
- java使用递归,非递归方式实现二叉树的三种常见遍历方式
- 【1291】数据结构上机测试4.1:二叉树的遍历与应用1 SDUTOJ