(基础问题)如何通过中序遍历和先序遍历的结果推导出二叉树?

本人刚接触算法不久,对于树的遍历了解不够透彻

问题:
已知一个二叉树的 中序序列为 CBDAEFI 先序序列为 ABCDEFI ,求二叉树的高度,该题给出的答案是4,我自己算出来3,不知道哪里算错了

我自己能推导的思路:
1、根节点是A
2、左子树为CBD,右子树为EFI
3、左子树再分解成:C为左子树的节点,B为C的左节点,D为C的右节点
4、右子树再分解成:E为右子树的节点,F为E的左节点,I为E的右节点

总共就三层,不知道哪里出错

阅读 2.3k
2 个回答

先序是 根左右
中序是 左根右

所以根据先序,可以通过第一个节点知道根是谁,
再结合中序(已知根),可以把序列分成左右子杼,以此类推。

问题:
已知一个二叉树的 中序序列为 CBDAEFI 先序序列为 ABCDEFI ,求二叉树的高度,该题给出的答案是4,我自己算出来3,不知道哪里算错了

我自己能推导的思路:

  1. 根节点是A
  2. 左子树为CBD,右子树为EFI
    a. 左中为CBD, 左先为BCD,所以左根是 B,左子为C,右子为D
    b. 右中为EFI,右先EFI,右根是E, 左子为空,右子为FI

    1. 继续分解右子FI,中序为FI,先序为FI
    2. 根为F,左子为空,右子为I

    综合就是

        A 
     B      E 
    C D         F
                   I
    
   A
 B  E
C D  F
      I

中序遍历是递归左,打印当前节点,递归右
先序遍历是打印当前节点,递归左,递归右
可以再搜索一下文章来加深理解
https://cloud.tencent.com/dev...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题