树代码:
function TreeNode(val) {
this.val = val
this.left = null
this.right = null
}
let node = {
val: 'A',
left: {
val: 'B',
left: {
val:'D',
},
right: {
val:'E',
},
},
right: {
val:'C',
left:null,
right:{
val:'F'
},
}
}
二叉树的遍历
二叉树的遍历是指按照一定的规则访问二叉树中的所有节点,可以分为三种方式:前序遍历、中序遍历和后序遍历。
- 前序遍历
前序遍历就是先访问根节点,然后递归地遍历左子树,最后递归地遍历右子树。
function preorderTraversal(node) {
if (!node) return[]
let res = []
res.push(node.val);// 先将根节点push到数组中
let L=preorderTraversal(node.left); // 遍历左子树
let r=preorderTraversal(node.right); // 遍历右子树
return res.concat(L).concat(r)//拼接
}
console.log(preorderTraversal(node));
- 中序列遍历
中序遍历就是先递归地遍历左子树,然后访问根节点,最后递归地遍历右子树。
function preorderTraversal(node) {
if (!node) return[]
let res = []
let L=preorderTraversal(node.left); // 遍历左子树
res.push(node.val);// 将根节点push到数组中
let r=preorderTraversal(node.right); // 遍历右子树
return L.concat(res).concat(r)
}
console.log(preorderTraversal(node));
- 后序遍历
后序遍历就是先递归地遍历左子树,然后递归地遍历右子树,最后访问根节点。
function preorderTraversal(node) {
if (!node) return[]
let res = []
let L=preorderTraversal(node.left); // 遍历左子树
let r=preorderTraversal(node.right); // 遍历右子树
res.push(node.val);// 先访问根节点
return L.concat(r).concat(res)
}
console.log(preorderTraversal(node));
- 用迭代的方法遍历树
var preorderTraversal = function (root) {
if (!root) return []
// 合理安排入栈和出栈的顺序
const res = []
const stack = []
stack.push(root)
while (stack.length > 0) {
const cur = stack.pop()
res.push(cur.val)
if (cur.right) {
stack.push(cur.right)
}
if (cur.left) {
stack.push(cur.left)
}
}
return res
}