简述:给一颗二叉树,令树内的每一个节点左右子树互换。
递归思路:
输入与输出:输入树的根节点,输出处理后的根节点。
临界值:输入null,返回null;
单层递归:前序遍历,先构造根节点:交换左右子树,然后分别翻转左右子树,作为根节点的新子树。
迭代思路:
DFS或BFS时,每遍历到一个节点,交换左右子节点。
构造二叉树 链接简述:给一个二叉树的中序遍历和后序遍历,构建二叉树。
递归思路:
输入:中序遍历数组,后续遍历数组,中序遍历开始值,中序遍历结束值,后序遍历开始值,后续遍历结束值。输出:根节点。
临界值:中序遍历开始值》=中序遍历结束值,返回null;
单层递归:
-
构造根节点:取后续遍历数组最后一数。
-
构造左子树:中序遍历开始值 = 原值。
中序遍历结束值 = 根节点所在位置。
后续遍历开始值 = 原值。
后续遍历结束值 = 原值 +中序遍历数组长度 = 原值 + 中序遍历结束值 - 中序遍历开始值。
-
构造右子树:中序遍历开始值 = 根节点所在位置 + 1。
中序遍历结束值 = 原值。
后续遍历开始值 = 原值 + 中序遍历数组长度 =。
后续遍历结束值 = 原值 -1。
-
循环不变量,区间选取是左闭右开。
构造最大的二叉树 链接:简述:给一个整数数组,据此构造二叉树,令数组中的最大数最为根,最大数左边的数据项作为左子树,最大数右边的数据项作为右子树。
递归思路:
输入:整数数组,开始值,结束值。 输出:根节点。
临界值:开始值>=结束值,返回null。
单层递归: 前序
-
构造根节点:根节点为数组中最大值。
-
构造左子树:开始值 = 原值
结束值 = 根节点所在位置。
-
构造右子树:开始值 = 根节点所在位置+1。
结束值 = 原值。
-
循环不变量:区间选取是左闭右开。
简述:给两个二叉树,进行合并,公共节点的值相加。
递归思路:
输入:1号二叉树节点,2号二叉树节点,返回 改造后节点。
临界值:
- 输入的两个节点都是null,返回null。
- 左空右不空,左不空右空,返回不空的值。
单层递归:前序
- 构造根节点:左右都不为空,以根值的和为根。
- 构造左子树:调用递归,输入1号节点左子树,2号节点左子树。
- 构造右子树:调用递归,输入1号节点右子树,2号节点右子树。
迭代思路:
层序遍历,利用队列同时处理双节点。1树2树节点都不为空,推入容器,有一者为空,直接替换。
总结:没啥好总结的,等我想到再写吧。
2021.10.7



