课程名称: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);
}
};
今天学习的先中后序的算法,递归方法实现还是很容易理解的,针对后面的堆栈实现先中后序听懂了,自己重新写还是没写出来,明天重新看一遍再理解理解吧,对自己说一句,加油😀~
坚持打卡,坚持学习!明天见💪~