剑指offer
Ccccc_u
这个作者很懒,什么都没留下…
展开
-
重建二叉树
题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:前序遍历第一个值 1 一定是整棵树的头节点,在中序遍历中查找1的位置,1的左边 4,7,2就是头结点1的左子树节点;1的右边 5,3,8,6 就是...原创 2019-06-19 09:55:00 · 65 阅读 · 0 评论 -
树的子结构
题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路:遍历树A ,每找到一个与树B的头节点相等的值,就进行判断。/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeN...原创 2019-06-19 11:19:45 · 68 阅读 · 0 评论 -
二叉树的镜像
问题:输入一颗二叉树,输出它的镜像。思路:前序遍历二叉树的每个节点,如果遍历到的节点有子节点,就交换它的两个子节点。/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { ...原创 2019-06-20 10:36:59 · 53 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路:后序遍历的最后一个数为整棵树的根节点,如果是一颗二叉搜索树,那么它的后序遍历可以被根节点分为两个部分,左子树节点全部小于根节点,而右子树节点全部大于根节点。基于这个思路可以递归地判断左、右子树是否为二叉搜索树。第一种:public cl...原创 2019-06-20 15:59:02 · 57 阅读 · 0 评论 -
二叉树中和为某一值的路径
题目:输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)思路:先序遍历,即对二叉树DFS遍历。每添加一个结点判断是否是叶结点,累加和是否到target。遍历到叶节点后,回退到父节点继续遍历。/**public class TreeNod...原创 2019-06-25 11:31:50 · 49 阅读 · 0 评论 -
二叉搜索树与双向链表
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路:二叉搜索树的中序遍历就是从小到大,if括号中的作用就是找到二叉树的最小值,即排序链表的第一个节点。/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode...原创 2019-06-26 11:34:46 · 64 阅读 · 0 评论 -
字符串的排列
题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。思路:回溯法import java.util.*;public class Solution { public ArrayList<String> Permutation(String s...原创 2019-06-27 10:32:50 · 68 阅读 · 0 评论