二叉树的镜像(简单)
操作给定的二叉树,将其变换为源二叉树的镜像。
思路:
- 根节点左右节点调换位置
- 递归
- 注意判断空子树情况
二叉树的深度(简单)
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
思路:
- 循环,类似广度优先
- 每次循环时判断下一层是否有结点存在,存在则deep加一
- 注意空树
- 注意Proot(根节点)不能迭代,转换成list,即代码第12行a = [pRoot]
重建二叉树(中等)
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
思路:
- 自己随便画个二叉树并写出前序中序遍历结果
- 根据前序遍历找根节点,根据中序遍历找左右子树
- 递归重复
- 注意空子树情况
二叉搜索树与双向链表(中等)
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
注:二叉搜索树 --> 左子树 < 根节点 < 右子树
思路:
- 针对左子树,将其构造成双向链表,并将其最右指针连接其父节点
- 针对右子树,将其构成双向链表,并将其最左指针连接其父节点
- 递归操作,返回值是树的最左节点
- 注意树为空或只有根节点时返回自身