[算法练习2] - 二叉树E

[算法练习2] - 二叉树E

遍历方法

经典的方法有三种,前序遍历、中序遍历和后序遍历。其中,前、中、后序,表示的是节点与它的左右子树节点遍历打印的先后顺序。

前序遍历是指,对于树中的任意节点来说,先打印这个节点,然后再打印它的左子树,最后打印它的右子树。

中序遍历是指,对于树中的任意节点来说,先打印它的左子树,然后再打印它本身,最后打印它的右子树。

后序遍历是指,对于树中的任意节点来说,先打印它的左子树,然后再打印它的右子树,最后打印这个节点本身。

实际上,二叉树的前、中、后序遍历就是一个递归的过程。比如,前序遍历,其实就是先打印根节点,然后再递归地打印左子树,最后递归地打印右子树。

写递归代码的关键,就是看能不能写出递推公式,而写递推公式的关键就是,如果要解决问题A,就假设子问题B、C已经解决,然后再来看如何利用B、C来解决A。所以,我们可以把前、中、后序遍历的递推公式都写出来。

前序遍历的递推公式:

preOrder( r ) = print r->preOrder(r->left)->preOrder(r->right)

中序遍历的递推公式:

inOrder( r ) = inOrder(r->left)->print r->inOrder(r->right)

后序遍历的递推公式:

postOrder( r ) = postOrder(r->left)->postOrder(r->right)->print r

// 定义二叉树节点类
class TreeNode {
  constructor(val) {
    this.val = val;
    this.left = null;
    this.right = null;
  }
}

// 中序遍历函数
function inOrderTraversal(root) {
  if (root === null) {
    return;
  }

  inOrderTraversal(root.left); // 递归遍历左子树
  console.log(root.val); // 处理当前节点(这里使用打印操作)
  inOrderTraversal(root.right); // 递归遍历右子树
}

// 前序遍历函数
function preOrderTraversal(root) {
  if (root === null) {
    return;
  }

  console.log(root.val); // 处理当前节点(这里使用打印操作)
  preOrderTraversal(root.left); // 递归遍历左子树
  preOrderTraversal(root.right); // 递归遍历右子树
}

// 后序遍历函数
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);

// 执行中序遍历
inOrderTraversal(root);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值