关于根据先序遍历和中序遍历画二叉树的方法

一些新同学在画二叉树时往往会摸不着头脑不知道怎么画,我也是刚刚学,接下来给你们提供我自己研究出来的两种定理,也欢迎各位对此批评指点:

①ZYT_先序遍历定理_前字母必比后字母平级或更高(能判断左右则不为同级)

②ZYT_中序遍历定理_前字母必在后字母左边


 

注:下面提到的由②可知即  由ZYT_中序遍历定理_前字母必在后字母左边  可知


如设一棵二叉树的先序序列:ABDFCEGH,中序序列BFDAGEHC,请画出这棵二叉树。

由先序遍历头字母可知根节点为A,

由中序遍历根节点A可得在左子树子孙(BFD),右子树子孙(GEHC),即

关于根据先序遍历和中序遍历画二叉树的方法_第1张图片

 根据:

  1. ZYT_先序遍历定理_前字母必比后字母平级或更高(能判断左右则不为同级)
  2. ZYT_中序遍历定理_前字母必在后字母左边

 可得

   B一定在F和D的左边,故一定不为同级,即

关于根据先序遍历和中序遍历画二叉树的方法_第2张图片

 

同理可知,F在D的左边,故一定不为同级,即

关于根据先序遍历和中序遍历画二叉树的方法_第3张图片

 

 另一边的CEGH由先序遍历头结点字母可知右子树根节点为C

由②可知GEH必在C的左边,故一定不为同级,即

关于根据先序遍历和中序遍历画二叉树的方法_第4张图片

 

EGH由先序遍历头字母可知该部分根节点为E

由②可知G必在E的左边,E必在H的左边。故为

关于根据先序遍历和中序遍历画二叉树的方法_第5张图片

 

综合左右子树可得该棵二叉树:

关于根据先序遍历和中序遍历画二叉树的方法_第6张图片

 

 

 

 

 

你可能感兴趣的:(c语言)