赞
踩
二叉树遍历在各种算法和数据结构问题中都有广泛的应用,如二叉搜索树、表达式的树形表示、堆的实现等。同时也是前端面试中的常客,掌握好二叉树遍历算法对于一名合格的前端工程师来说至关重要。
二叉树遍历(Binary Tree Traversal)是指按照某种规则访问二叉树中所有节点的过程。由于二叉树是一个递归的数据结构,因此遍历操作通常也是递归进行的。
二叉树的遍历主要有四种方式:前序遍历(Pre-order Traversal)、中序遍历(In-order Traversal)、后序遍历(Post-order Traversal)和层次遍历(Level-order Traversal)。
首先定义一个 TreeNode 类来表示二叉树的节点
- class TreeNode {
- constructor(val, left = null, right = null) {
- this.val = val; // 节点的值
- this.left = left; // 左子节点,默认为null
- this.right = right; // 右子节点,默认为null
- }
- }
定义遍历方法
- function preorderTraversal(root) {
- if (root === null) {
- return; // 如果节点为空,则直接返回
- }
- console.log(root.val); // 访问当前节点的值
- preorderTraversal(root.left); // 递归遍历左子树
- preorderTraversal(root.right); // 递归遍历右子树
- }
创建二叉树
- // 创建二叉树
- const root = new TreeNode(1);
- root.left = new TreeNode(2);
- root.right = new TreeNode(3);
- root.left.left = new TreeNode(4);
- root.left.right = new TreeNode(5);
调用方法执行遍历
- // 执行遍历
- console.log("前序遍历:");
- preorderTraversal(root);
定义遍历方法
- // 中序遍历
- function inorderTraversal(root) {
- if (root === null) {
- return;
- }
- inorderTraversal(root.left); // 遍历左子树
- console.log(root.val); // 访问根节点
- inorderTraversal(root.right); // 遍历右子树
- }
创建二叉树
- // 创建二叉树
- const root = new TreeNode(1);
- root.left = new TreeNode(2);
- root.right = new TreeNode(3);
- root.left.left = new TreeNode(4);
- root.left.right = new TreeNode(5);
调用方法执行遍历
- console.log("中序遍历:");
- inorderTraversal(root);
定义遍历方法
- // 后序遍历
- function postorderTraversal(root) {
- if (root === null) {
- return;
- }
- postorderTraversal(root.left); // 遍历左子树
- postorderTraversal(root.right); // 遍历右子树
- console.log(root.val); // 访问根节点
- }
创建二叉树
- // 创建二叉树
- const root = new TreeNode(1);
- root.left = new TreeNode(2);
- root.right = new TreeNode(3);
- root.left.left = new TreeNode(4);
- root.left.right = new TreeNode(5);
调用方法执行遍历
- console.log("后序遍历:");
- postorderTraversal(root);
定义遍历方法
- // 层次遍历(使用队列)
- function levelOrderTraversal(root) {
- if (root === null) {
- return;
- }
- const queue = [root]; // 初始化队列,将根节点入队
- while (queue.length > 0) {
- const node = queue.shift(); // 出队一个节点
- console.log(node.val); // 访问该节点
- if (node.left !== null) {
- queue.push(node.left); // 左子节点入队
- }
- if (node.right !== null) {
- queue.push(node.right); // 右子节点入队
- }
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
创建二叉树
- // 创建二叉树
- const root = new TreeNode(1);
- root.left = new TreeNode(2);
- root.right = new TreeNode(3);
- root.left.left = new TreeNode(4);
- root.left.right = new TreeNode(5);
调用方法执行遍历
- console.log("层次遍历:");
- levelOrderTraversal(root);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。