二叉树是一种常用的数据结构,它由节点组成,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的遍历是指按照一定的顺序访问树中的所有节点。
常见的二叉树遍历方式包括前序遍历、中序遍历和后序遍历。
前序遍历(Preorder Traversal)
前序遍历(Preorder Traversal): 前序遍历的访问顺序为:根节点 -> 左子树 -> 右子树。即先访问根节点,然后按照前序遍历的方式递归地访问左子树和右子树。
function preorderTraversal(node) {
if (node === null) return;
console.log(node.val); // 访问当前节点
preorderTraversal(node.left); // 前序遍历左子
preorderTraversal(node.right); // 前序遍历右子树
}
中序遍历(Inorder Traversal)
中序遍历(Inorder Traversal): 中序遍历的访问顺序为:左子树 -> 根节点 -> 右子树。即先按照中序遍历的方式递归地访问左子树,然后访问根节点,最后再按照中序遍历的方式递归地访问右子树。
function inorderTraversal(node) {
if (node === null) return;
inorderTraversal(node.left); // 中序遍历左子树
console.log(node.val); // 访问当前节点
inorderTraversal(node.right); // 中序遍历右子树
}
后序遍历(Postorder Traversal)
后序遍历(Postorder Traversal): 后序遍历的访问顺序为:左子树 -> 右子树 -> 根节点。即先按照后序遍历的方式递归地访问左子树,然后递归地访问右子树,最后访问根节点。
function postorderTraversal(node) {
if (node === null) return;
postorderTraversal(node.left); // 后序遍历左子树
postorderTraversal(node.right); // 后序遍历右子树
console.log(node.val); // 访问当前节点
}
栈实现遍历二叉树
function inOrder(root) {
var res = [];
var stack = [];
var p = root;
while (p || stack.length > 0) {
while (p) {
stack.push(p);
p = p.left;
}
p = stack.pop();
res.push(p.node);
p = p.right
}
return res
}