利用前,中序建立二叉树
一.问题描述:设二叉树的节点值为大写字母,输入二叉树的前序遍历和中序遍历序列,生成此二叉树,输出该二叉树的后序遍历和按层次遍历序列。输入某结点值,在二叉树中查找该结点,若该结点存在,则输出从根到该结点的路径,否则给出不存在信息。
二.算法思路:将输入的前序列(例如:ABC)和中序列(BAC)转化为一个完整的前序列(ABC)之后,进行树的建立。
三.核心算法:voidBuildi
gcharacharbcharch由前序和中序得到便于建立二叉树的新序列i
ti0j0k0ARRAYm
fori0i49imAi0
Ai0mBi0
Bi0kle
gthchifle
gtha1字符串长度为1的情况chka0chkchkelseifle
gtha2字符串长度为2的情况chka0ifa0b0chkchka1ifa0b1chka1chkchkchkelseifle
gtha3字符串长度为3的情况chka0ifa0b1
fchka1chkchkchka2elseifa0b0
chkifa1b1
chka1chkchka2elseifa1b2
chka1chka2chkelseifa0b2ifa1b0
chka1chkchka2chkelseifa1b1
chka1chka2chkchkchkchkelseifle
gtha4chka0forj0jifa0bj
fori0iji
mAiai1mBibiforijile
gthai
Aijai1
Bijbi1break
fBuildi
gmAmBchBuildi
g
A
Bch
递归调用递归调用
四.源程序:
i
cludestdioh
i
cludestdlibh
i
cludeiostream
usi
g
amespacestd
typedefcharElemTypetypedefstructNode二叉树结点
ElemTypedata
structNodelc
structNoderc
NODETree
structArray
charA50charB50typedefstructArrayARRAY
structStack定义栈结点
ElemTypestacki
ttopi
tMaxsize
structStackq全局变量1,用于存储由前序和中序序列得到的新序列
i
tflag0
全局变量2,标记变量,用于控制
voidI
itStackstructStacks初始化栈,将其置为空
sMaxsize30sstackcharmalloc30sizeofElemTypestop1
voidPushstructStacksElemTypex新元素x进栈
stopsstackstopx
charPopstructStacks删除栈顶元素并返回之
fifstop1exit1
stopretur
sstackstop1i
tEmptyStackstructStacks判断栈是否为空,是返回1,否返回0ifstop1retur
1elseretur
0i
tle
gthchara求数组长度i
ti0whileaiiretur
ivoidBuildi
gcharachr