二叉树遍历

87 阅读1分钟

二叉树是一种常用的数据结构,它由节点组成,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的遍历是指按照一定的顺序访问树中的所有节点。

常见的二叉树遍历方式包括前序遍历、中序遍历和后序遍历。

前序遍历(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
}