不含重复字符的最长子字符串
思路
var lengthOfLongestSubstring = funtion(s){
// 初始化最大值、长度
let max = 0;
let len = s.length;
let str = '';
for(let i = 0; i < len; i++){
let index = str.indexOf(s[i])
if(index != )
}
str =
}
二叉树的中序遍历
给定一个二叉树的根节点 root
,返回它的 中序 遍历。
示例1:
输入:root = [1,null,2,3]
输出:[1,3,2]
输入:root = []
输出:[]
输入:root = [1]
输出:[1]
示例2:
输入:root = [1,2]
输出:[2,1]
示例3:
输入:root = [1,null,2]
输出:[1,2]
思路
二叉树有天然的递归性质,前序遍历:根左右,中序遍历:左根右,后续遍历:左右根;
inorder(root) 遍历节点;inorder(root.left)遍历左子树;inorder(order.right)遍历右子树;
遍历完根节点,遍历子节点,遇到空节点结束。
var inorderTraversal = function(root){
// 定义一个空数组
const res = [];
const inorder = (root) => {
// 如果遇到空节点,返回nul
if(!root) return;
// 中序遍历:左根右遍历
inorder(root.left);
res.val(root);
inorder(root.right);
}
inorder(root);
return res;
}
时间复杂度:O(n)O(n),其中 nn 为二叉树节点的个数。二叉树的遍历中每个节点会被访问一次且只会被访问一次。
空间复杂度:O(n)O(n)。空间复杂度取决于递归的栈深度,而栈深度在二叉树为一条链的情况下会达到 O(n)O(n) 的级别。
连接