Java教程

【学习打卡】第16天 数据结构和算法

本文主要是介绍【学习打卡】第16天 数据结构和算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

二叉树的层序遍历(leetcode - 102)

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

思路

  1. 创建一个数组res,用来存放层序遍历的节点
  2. 对二叉树进行广度优先遍历,每一层出队列时,都push到新创建的数组中
  3. 直至队列为空,返回res
var levelOrder = function(root) {
    if(!root) return [];
    let queue = [root];
    const res = [];
    while(queue.length) {
        let len = queue.length;
        res.push([])
        while(len--) {
            let n = queue.shift();
            res[res.length - 1].push(n.val)
            if(n.left) queue.push(n.left);
            if(n.right) queue.push(n.right);
        }
    }
    return res;
};

二叉树的中遍历(leetcode - 94)

给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。

递归

var inorderTraversal = function(root) {
    const res = [];
    const inorder = (n) => {
        if(!n) return;
        if(n.left) inorder(n.left);
        res.push(n.val);
        if(n.right) inorder(n.right);
    }
    inorder(root);
    return res;
};

栈与迭代

var inorderTraversal = function(root) {
    const res = [];
    if(!root) return res
    const stack = []
    let p = root;
    while(stack.length || p) {
        while(p){
            stack.push(p);
            p = p.left;
        }
        const n = stack.pop();
        res.push(n.val)
        p = n.right
    }
    return res;
};
这篇关于【学习打卡】第16天 数据结构和算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!