继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【学习打卡】第12天 数据结构之“树”

风吹尘
关注TA
已关注
手记 61
粉丝 9
获赞 1

课程名称:JavaScript版数据结构与算法
课程章节:第8章 数据结构之“树”
主讲老师:lewis

课程内容:

今天学习的内容包括:
8-3 二叉树的先中后序遍历——使用递归处理先中后序遍历,这种做法比较简单。
8-4 二叉树的先中后序遍历(非递归版)——使用堆栈实现我们先中后序遍历。

课程收获:

二叉树的先中后序遍历

1、先序遍历:对数据进行根左右遍历
通过递归算法,先处理root,在进行访问root.left,最后访问root.right,从而实现我们想要的先序遍历

const bt = require('./bt');

const preorder = (root) => {
  if(!root) return
  console.log(root.val);
  preorder(root.left)
  preorder(root.right)
}

preorder(bt)

2、中序遍历:对数据进行左根右遍历
通过递归算法,先处理root.left,在进行访问root,最后访问root.right,从而实现我们想要的中序遍历

const bt = require('./bt');

const inorder = (root) => {
    if (!root) { return; }
    inorder(root.left);
    console.log(root.val);
    inorder(root.right);
};

inorder(bt);

3、后序遍历:对数据进行左右根遍历
通过递归算法,先处理root.left,在进行访问root.right,最后访问root,从而实现我们想要的后序遍历

const bt = require('./bt');

const postorder = (root) => {
    if (!root) { return; }
    postorder(root.left);
    postorder(root.right);
    console.log(root.val);
};

postorder(bt);

二叉树的先中后序遍历(非递归版)

1、先序遍历

const bt = require('./bt');

const preorder = (root) => {
    if (!root) { return; }
    const stack = [root];
    while (stack.length) {
        const n = stack.pop();
        console.log(n.val);
        if (n.right) stack.push(n.right);
        if (n.left) stack.push(n.left);
    }
};

preorder(bt)

2、中序遍历

const bt = require('./bt');

const inorder = (root) => {
     if (!root) { return; }
     const stack = [];
     let p = root;
     while (stack.length || p) {
         while (p) {
             stack.push(p);
             p = p.left;
         }
         const n = stack.pop();
		console.log(n.val);
         p = n.right;
     }
};

inorder(bt);

3、后序遍历

const postorder = (root) => {
    if (!root) { return; }
    const outputStack = [];
    const stack = [root];
    while (stack.length) {
        const n = stack.pop();
        outputStack.push(n);
        if (n.left) stack.push(n.left);
        if (n.right) stack.push(n.right);
    }
    while(outputStack.length){
        const n = outputStack.pop();
        console.log(n.val);
    }
};

今天学习的先中后序的算法,递归方法实现还是很容易理解的,针对后面的堆栈实现先中后序听懂了,自己重新写还是没写出来,明天重新看一遍再理解理解吧,对自己说一句,加油😀~

坚持打卡,坚持学习!明天见💪~

​​​​http://img2.mukewang.com/62fa628a0001e93c19200892.jpg

http://img1.mukewang.com/62fa667d0001406319200892.jpg

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP