算法题解析与总结(一)

不含重复字符的最长子字符串

思路

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:

算法题解析与总结(一)_第1张图片

输入:root = [1,null,2,3]
输出:[1,3,2]
输入:root = []
输出:[]
输入:root = [1]
输出:[1]

示例2:

算法题解析与总结(一)_第2张图片

输入:root = [1,2]
输出:[2,1]

示例3:

算法题解析与总结(一)_第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) 的级别。

连接

你可能感兴趣的:(面试题汇总与解析,算法)