• Sword 07


    https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/

    重建二叉树

    如果手算的话,先由先序遍历的根节点确立中序遍历中根节点的位置

    这样根据中序遍历的性质就可以将二叉树分为两部分,也就将先序遍历的二叉树分为两部分

    这时候关于原树的根节点,与左右子树的关系就已经明了

    再递归的求左右子树即可(发现将问题分解成了两个同性质的,小规模的问题)

    下一步就是将小规模当做已知,构建大规模和两个小规模之间的关系

    TreeNode * ret = new TreeNode(preorder[root]);

    ret->left = recur()

    ret->right = recur()

    再说说,recur 中参数如何设定的问题,很明显我们需要通过前序的根节点来分割中序遍历数组,所以一定要有前序的根节点下标,中序的左起点和右终点

    再说转移式子中两个 recur 的参数问题,根据前序遍历根节点找到中序根节点(由于值不同)再中序数组确定长度反推前序的下一步两个根节点即可

    记住递归的几个要点:

    1、递归终止条件要记得

    2、将大问题分解成数个**规模缩小**同等性质**的问题

    3、写出大问题转移到小问题的转移式

    4、将小问题当做已知去求解(有些类似于数学归纳法)

  • 相关阅读:
    【转】B树以及B+树的区别
    epoll 笔记
    HTTP 请求的读取和分析
    获取指定网页的所有链接
    Python爬取表情包
    Python重命名文件夹下的文件(包含子文件夹下的文件)
    BeautifulSoup根据class的属性查找标签的方法
    群聊斗神
    Python简单的下载图片
    Python 记录一个坑
  • 原文地址:https://www.cnblogs.com/FriskyPuppy/p/14473619.html
Copyright © 2020-2023  润新知