树
RushmcRunRunRun
这个作者很懒,什么都没留下…
展开
-
99.恢复二叉搜索树
99.恢复二叉搜索树题解前序可以很方便地形成一条搜索路径,中序遍历BST的时候可以得到一个有序序列,后序可以用来计算一颗算数表达式树 运用空间复杂度O(1)的Morris算法进行中序遍历(本题与二叉树顺序相关,使用中序遍历),先找到当前节点左子树的最右的节点(即前驱节点,中序遍历的最后一个节点),如果前驱节点为空,将其右节点指向当前节点如果前驱节点不为空,说明前驱节点已经指向当前节点,说明我们已经遍历完了当前节点的左子树,我们必须将前驱节点的右节点置空(只是利用这个节点暂存数据,起到原创 2020-08-08 20:35:23 · 155 阅读 · 0 评论 -
336.回文对
336.回文对题解 本来暴力可破,到了115/134个用例时超过了时间限制。本题可用字典树优化暴力算法。先把各个字符串倒序插入字典树,可分三种情况。①字典树中有当前字符串的翻转单词 符合题意②当前字符串是回文串,那么可以查找字典树中的空字符③普通情况 检查当前字符串前j个字符组成的字符串是不是回文串,若是则检索字典树时候存在后面部分的翻转即可。 同理可从后面开始检查,提高效率class Solution { public class Trie { Trie[] nex原创 2020-08-06 21:18:44 · 177 阅读 · 0 评论 -
337.打家劫舍Ⅲ
337.打家劫舍Ⅲ题解 使用深度优先搜索,分使用根节点和不使用根节点两种情况,递归搜索左右子节点。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public原创 2020-08-05 18:43:24 · 145 阅读 · 0 评论 -
114.二叉树展开为链表
114.二叉树展开为链表题解 展开后,单链表的访问顺序就是树的前序遍历顺序,所以先进行前序遍历保存在list中,再构建单链表,左节点都为空。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { thi原创 2020-08-02 20:41:42 · 103 阅读 · 0 评论 -
144.二叉树的前序遍历
144.二叉树的前序遍历题解 每次迭代弹出栈顶元素,记录其根数值,按次序将其右孩子、左孩子压入栈中,/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { publi原创 2020-08-02 20:41:11 · 125 阅读 · 0 评论