1. 二叉搜索树第k个结点
题目描述:
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
代码实现:
/* |
2.从上往下打印二叉树
题目描述:
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
代码实现:
|
3. 二叉树打印成多行
题目描述:
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
题目思路:
- 开始时,last=节点1,nLast=null,把节点1放入队列queue,遍历开始,queue={1}。
- 从queue中弹出节点1并打印,然后把节点1的孩子依次放入queue,放入节点2时nlast节点2。放入节点3时,nlast=节点3此时发现弹出的节点1=last.所以换行,井令last=nlast=节点3, queue={2,3}。
- 从queue中弹出点2并打印,然后把节点2的孩子放入queue,放入节点4时nLast=节点4, queue={3,4}。
代码实现:
|
4. 按之字形顺序打印二叉树
题目描述:
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路:
利用两个栈的辅助空间分别存储奇数偶数层的节点,然后打印输出。或使用链表的辅助空间来实现,利用链表的反向迭实现逆序输出。
代码实现:
/** |
5. 二叉树中和为某一值的路径
题目描述:
输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
思路:
- 首先将根节点放入链表,target减去这个根节点
- 判断target是否为零同时是叶子节点,如果是就将当前的链表放在结果连表里
- 如果不是,就递归去访问左右子节点。
- 无论是找到没有,都要回退一步
代码实现:
/* |
6. 重建二叉树
题目描述:
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
思路:
由于在中序遍历序列中,有3个数字是左子树结点的值,因此左子树总共有3个左子结点。同样,在前序遍历的序列中,根结点后面的3个数字就是3个左子树结点的值,再后面的所有数字都是右子树结点的值。这样我们就在前序遍历和中序遍历两个序列中,分别找到了左右子树对应的子序列。
代码实现:
/** |
7. 树的子结构
题目描述:
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
思路:
- 先从根开始再把左作为根,再把右作为根由本函数决定。把一个为根的时候的具体比对过程是第二个函数决定。
- 从根可以认为是一颗树,从左子树开始又可以认为是另外一颗树,从右子树开始又是另外一棵树。
- 本函数就是判断这一整颗树包不包含树2,如果从根开始的不包含,就从左子树作为根节点开始判断,
- 再不包含从右子树作为根节点开始判断。
- 整体算法递归流程控制。
代码实现:
/** |
8. 二叉树的镜像
题目描述:
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:
二叉树的镜像定义:源二叉树 |
代码实现:
/** |
9. 二叉搜素树的后序遍历序列
题目描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
代码实现:
/** |
10. 二叉搜索树与双向链表
题目描述:
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
思路:
定义一个头结点指针和尾节点指针
中序遍历的步骤,在递归的中间部分不是输出节点值,而是调整尾节点指针指向。
代码实现:
/** |
11. 二叉树的深度
题目描述:
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
代码实现:
/** |
12. 平衡二叉树
题目描述:
输入一棵二叉树,判断该二叉树是否是平衡二叉树
描述:如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
代码实现:
/** |
13. 二叉树的下一个节点
题目描述:
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
代码实现:
/* |
14. 对称的二叉树
题目描述:
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
代码实现:
|
14. 序列化二叉树
题目描述:
请实现两个函数,分别用来序列化和反序列化二叉树
代码实现:
/** |