栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

04二叉树的修改与构造

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

04二叉树的修改与构造

二叉树的修改与构造 翻转二叉树 链接

简述:给一颗二叉树,令树内的每一个节点左右子树互换。

递归思路:

输入与输出:输入树的根节点,输出处理后的根节点。

临界值:输入null,返回null;

单层递归:前序遍历,先构造根节点:交换左右子树,然后分别翻转左右子树,作为根节点的新子树。

迭代思路:

DFS或BFS时,每遍历到一个节点,交换左右子节点。

构造二叉树 链接

简述:给一个二叉树的中序遍历和后序遍历,构建二叉树。

递归思路:

输入:中序遍历数组,后续遍历数组,中序遍历开始值,中序遍历结束值,后序遍历开始值,后续遍历结束值。输出:根节点。

临界值:中序遍历开始值》=中序遍历结束值,返回null;

单层递归:

  1. 构造根节点:取后续遍历数组最后一数。

  2. 构造左子树:中序遍历开始值 = 原值。

    ​ 中序遍历结束值 = 根节点所在位置。

    ​ 后续遍历开始值 = 原值。

    ​ 后续遍历结束值 = 原值 +中序遍历数组长度 = 原值 + 中序遍历结束值 - 中序遍历开始值。

  3. 构造右子树:中序遍历开始值 = 根节点所在位置 + 1。

    ​ 中序遍历结束值 = 原值。

    ​ 后续遍历开始值 = 原值 + 中序遍历数组长度 =。

    ​ 后续遍历结束值 = 原值 -1。

  4. 循环不变量,区间选取是左闭右开。

构造最大的二叉树 链接:

简述:给一个整数数组,据此构造二叉树,令数组中的最大数最为根,最大数左边的数据项作为左子树,最大数右边的数据项作为右子树。

递归思路

输入:整数数组,开始值,结束值。 输出:根节点。

临界值:开始值>=结束值,返回null。

单层递归: 前序

  1. 构造根节点:根节点为数组中最大值。

  2. 构造左子树:开始值 = 原值

    ​ 结束值 = 根节点所在位置。

  3. 构造右子树:开始值 = 根节点所在位置+1。

    ​ 结束值 = 原值。

  4. 循环不变量:区间选取是左闭右开。

合并两个二叉树 链接:

简述:给两个二叉树,进行合并,公共节点的值相加。

递归思路

输入:1号二叉树节点,2号二叉树节点,返回 改造后节点。

临界值:

  1. 输入的两个节点都是null,返回null。
  2. 左空右不空,左不空右空,返回不空的值。

单层递归:前序

  1. 构造根节点:左右都不为空,以根值的和为根。
  2. 构造左子树:调用递归,输入1号节点左子树,2号节点左子树。
  3. 构造右子树:调用递归,输入1号节点右子树,2号节点右子树。

迭代思路

层序遍历,利用队列同时处理双节点。1树2树节点都不为空,推入容器,有一者为空,直接替换。

总结:

没啥好总结的,等我想到再写吧。

2021.10.7

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/304472.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号