• 数据结构与算中树相关常见题型


    1.已知二叉树的中序遍历是DBEAFC.前序遍历是ABDECF.后序遍历怎么算?

    先理解前序和中序的涵义:

    前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。
    中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。在遍历左、右子树时,仍然先遍历左子树,再访问根结点,最后遍历右子树。

    所以,前序遍历ABDECF中,A肯定是根节点(第一个遍历根节点)。对照中序遍历,就能知道
    DBE是左子树,FC是又子树了。

    然后分别研究左右子树:
    1、左子树:中序DBE,前序是BDE;说明B是左子树的根节点,D是B的左孩子;E是右边的;
    2、右子树类似:C是右子树的根节点,F是C的左孩子(因为在中序遍历中F时在C前面的,所以一定是左孩子;如果是右孩子的话中序遍历时就应该是在C后面了对吧)

    所以后序遍历就是:DEBFCA.

    再如:
    eg:后序遍历为DBCEFGHA,中序遍历为EDCBAHFG,求前序遍历(网上例子)
    解:首先 看后序遍历DBCEFGHA,A为总根节点
    然后 寻找中序遍历EDCBAHFG中A位置,则EDCB在A的左枝,HFG在A的右枝;
    重复前两步(不懂就多读两遍),从后序遍历最后一位找,在中序遍历寻找对应点,得出左右分枝...
    最后得到AECDBHGF,再自己验证即可...


    总结: (1)只能通过前序遍历和中序遍历得到后序遍历 或 通过中序遍历和后序遍历得到前序遍历,而不能通过前序遍历和后序遍历得到中序遍历。

        (2)前序遍历特点第一个字母(节点)是根节点。  

          中序遍历特点: 根节点一般在中间(当然如果没有左子树或右子树就另当别论了)

          后序遍历特点最后一个字母一定是根节点

  • 相关阅读:
    4.19Java.util.Arrays类
    4.19Java数组的拷贝
    Inverse matrix of 4x4 matrix
    自言自语
    病了两天
    当年3ds max盗版光碟上的广告
    头晕的厉害
    复习了一下STL容器的知识
    一个简单的能处理MIPMAP的类
    空间变换代码,相当简洁优美
  • 原文地址:https://www.cnblogs.com/zhuzhenwei918/p/6596673.html
Copyright © 2020-2023  润新知