何为中序线索化
线索二叉树可以分为三种:
1.将二叉树按照中序遍历构造线索二叉树,则称为中序线索化
2.前序线索化
3.后序线索化
本文介绍中序线索化
中序线索二叉树的结点:
初始化时,ltag和rtag都为0,只有结点指向中序前驱或中序后继时,二者的值才会修改为1。
寻找二叉树中序前驱!!!
按照链接中方法找中序前驱,只能重头遍历树。
如果将二叉树线索化,比如将二叉树进行中序线索化,那么就可以很方便的找到中序前驱。如下图:
代码
功能
1.将二叉树中序线索化
2.利用线索化的二叉树寻找中序前驱和中序后继
3.利用找中序后继的方法,实现非递归中序遍历
4.利用找中序前驱的方法,实现非递归逆向中序遍历
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef char ElemType;
typedef struct ThreadNode{
ElemType data;
struct ThreadNode *l,*r;
int ltag,rtag;
}ThreadNode,*ThreadTree;
//全局变量
ThreadNode *pre=NULL;
ThreadNode *p=NULL;
ThreadNode *final=NULL;
ThreadNode *final2=NULL;
//利用前序遍历创建二叉树
void creat_ThreadTree(ThreadTree &TT){
char ch;
scanf("%c",&ch);
if(ch=='#'){
TT=NULL;
}else{
TT=(ThreadNode