由树写序列
给一棵树,怎么报出四种序列,举例:
a
/ \
b c
\ / \
d e f
\
g
先序序列
NLR:先根,再左子树,再右子树。
a是根,先报a。
a
左右子树的根是b和c,跟在后面。
a b c
当b为根,d在右,b后面补d。
a b d c
当c为根,e在左,f在右,e、f跟在c后面。
a b d c e f
当e为根,g在右,g排在e后、f前。
a b d c e g f
NLR(先序遍历): a, b, d, c, e, g, f
中序序列
LNR:先左子树,再根,再右子树。
第一遍只看大框架:左子树在前,根a居中,右子树在后。
b a c
当b为根,d在右,b的子树排成b d。
b d a c
当c为根,e在左,f在右,c的子树排成e c f。
b d a e c f
当e为根,g在右,e的子树排成e g。
b d a e g c f
LNR(中序遍历): b, d, a, e, g, c, f
后序序列
LRN:先左子树,再右子树,根最后。
第一遍只看大框架:左子树在前,右子树居中,根a最后。
b c a
当b为根,d在右,b的子树排成d b。
d b c a
当c为根,e在左,f在右,c的子树排成e f c。
d b e f c a
当e为根,g在右,e的子树排成g e。
d b g e f c a
LRN(后序遍历): d, b, g, e, f, c, a
层序序列
从上往下,一层一层,每层从左到右。
第一层只有a。
a
第二层是a的孩子:b, c。
a b c
第三层是b、c的孩子:d, e, f。
a b c d e f
第四层只剩e的孩子:g。
a b c d e f g
层序遍历: a, b, c, d, e, f, g
中序序列加任意序列还原树
若已知中序序列,再给出其他三种遍历序列中的任意一种,就可以唯一地确定一棵二叉树。
中序序列加先序序列
NLR(先序遍历): a, b, d, c, e, g, f
LNR(中序遍历): b, d, a, e, g, c, f
NLR定根,LNR分左右。
NLR首位是a,根为a;LNR中a左侧的b,d是左子树,右侧的e,g,c,f是右子树。
a
左子树里NLR中b在d前,b为根;LNR中d在b右,d为b的右孩子。
a
/
b
\
d
右子树里NLR中c在最前,c为根、a的右子孩子;LNR中e,g在c左,f在c右。
a
/ \
b c
\
d
以此类推:c的左子树里NLR中e在g前,e为根;LNR中g在e右,g为e的右孩子。
a
/ \
b c
\ /
d e
\
g
只剩f,f为c的右子孩子。
a
/ \
b c
\ / \
d e f
\
g
中序序列加后序序列
LNR(中序遍历): b, d, a, e, g, c, f
LRN(后序遍历): d, b, g, e, f, c, a
LRN定根取末位,LNR分左右。
LRN末位是a,根为a;LNR中a左侧的b,d是左子树,右侧的e,g,c,f是右子树。
a
左子树里LRN中b在d后,b为根;LNR中d在b右,d为b的右孩子。
a
/
b
\
d
右子树里LRN中c在g,e,f后,c为根、a的右子孩子;LNR中e,g在c左,f在c右。
a
/ \
b c
\
d
以此类推:c的左子树里LRN中e在g后,e为根;LNR中g在e右,g为e的右孩子。
a
/ \
b c
\ /
d e
\
g
只剩f,f为c的右子孩子。
a
/ \
b c
\ / \
d e f
\
g
中序序列加层序序列
LNR(中序遍历): b, d, a, e, g, c, f
层序遍历: a, b, c, d, e, f, g
层序定根取最先出现的,LNR分左右。
层序首位是a,根为a;LNR中a左侧的b,d是左子树,右侧的e,g,c,f是右子树。
a
左子树里层序中b比d先出现,b为根;LNR中d在b右,d为b的右孩子。
a
/
b
\
d
右子树里层序中c比e,g,f先出现,c为根、a的右子孩子;LNR中e,g在c左,f在c右。
a
/ \
b c
\
d
以此类推:c的左子树里层序中e比g先出现,e为根;LNR中g在e右,g为e的右孩子。
a
/ \
b c
\ /
d e
\
g
只剩f,f为c的右子孩子。
a
/ \
b c
\ / \
d e f
\
g