1. 给定一个字符串求字符串中所有字符组成的全排列即所有字符的组合的情况
例如 abcd 这个字符串,求这四个字符的全排列我们可以这样的进行思考,首先固定第一位的字符,然后把后序的字符依次与第一个位置的字符进行数据位置交换,依次,对于后序的字符我们采用这样方法依次进行交换。按照这种规律,我们可以想到递归的思想。
递归求全排列
1 | public static void main(String[] args) { |
除了这种方法外,这个题的递归代码还可以这样写:
1 |
|
2.求一个连续整数数组中的连续子序列和的最大值
例如在 {-2,-1,6,-3,-2,7,-15,1,2,2} 中连续子序列的最大是8 即是由数组中的 6 -3 -2 7 构成的连续子序列的和最大
我们可以采用 前i项和与第i项进行比较,取前i项和与第i项的最大值。由于我们每一步的最大值都会变,所以我们需要使用一个变量并记录当前计算或者上一步计算中的最大值
1 |
|
3. 二叉树
给定数组构建二叉树
由数组构建二叉树,主要是按照数组中的数据顺序,把数组中的数据插入到二叉树中。
最重要的就是先找出非叶子节点的节点序号,需要为每个序号建立他们的左右孩子节点。
1 | public static TreeNode creatTreeByArray(int[] array) { |
前序遍历的递归与非递归
1 | //前序的非递归与递归 |
把 前序遍历的结果存放在集合中
1 |
|
中序遍历的递归与非递归
1 |
|
后序遍历的递归与非递归
1 |
|
给定二叉树,返回层次遍历得到的节点
1 |
|
二叉树,从最底层向上,依次层次遍历
1 |
|
求树的路径的和
1 |
|
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,
1 |
|
这条路径上所有节点值相加等于目标的目标路径 返回List<List>
1 |
|
给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。
1 |
|
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
1 | package com.data.treeDemo; |