前序和中序遍历都实现了,后序线索化还不是很明白!如有大神看到,望指正!不胜感激!
// 中序线索二叉树实现.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
#define ElementType char
typedef enum{ Link, Thread } PointerTag;
//线索存储标志位
//Link(0):表示指向左右孩子的指针
//Thread(1):表示指向前驱和后继的线索
typedef struct BiThrNode
{
ElementType Data;
struct BiThrNode *Left;
struct BiThrNode *Right;
PointerTag Ltag;
PointerTag Rtag;
}BiThrNode, *BiThrTree;
//全局变量,始终指向刚刚问过的节点
BiThrNode *pre;
//创建一个二叉树:利用前序遍历创建二叉树
//函数声明
void CreatTree(BiThrTree *BT);
void DestroyBiTree(BiThrTree &T);
void DestroyBiThrTree(BiThrTree &Thrt);
//中序线索化二叉树,并且实现中序遍历操作函数定义
void InThreding(BiThrTree BT);
void InorderThreding(BiThrTree *p, BiThrTree T);
void InOrderTraverse(BiThrTree T);
void InOrderTraverse_Iter(BiThrTree T);
//前序线索化二叉树,并且实现前序遍历操作函数定义
void PreThreding(BiThrTree BT);
void PreorderThreding(BiThrTree *p, BiThrTree T);
void PreOrderTraverse(BiThrTree T);
void PreOrderTraverse_Iter(BiThrTree T);
//后序线索化二叉树,并且实现后序遍历操作函数定义
void PostThreding(BiThrTree BT);
void PostorderThreding(BiThrTree *p, BiThrTree T);
void PostOrderTraverse(BiThrTree T);
void PostOrderTraverse_Iter(BiThrTree T);
//函数定义
void CreatTree(BiThrTree *BT)
{
char ch;
cin >> ch;
if (ch == '#') *BT = NULL;
else
{
*BT = (BiThrNode*)malloc(sizeof(struct BiThrNode));
(*BT)->Data = ch;
(*BT)->Ltag = Link;
(*BT)->Rtag = Link;
CreatTree(&(*BT)->Lef