题解 | #相逆叶子#

相逆叶子

https://www.nowcoder.com/practice/41c7b0e8710e43ca9f328bf06ea2aff3

题目考察的知识点

  1. 树的遍历:题目要求比较两棵树的叶值序列,这涉及到对树的遍历操作。本题解析使用了深度优先搜索(DFS)进行树的遍历。
  2. 逆序比较:题目要求判断两棵树的叶值序列是否逆序,即第一棵树的叶子顺序是否与第二棵树的叶子逆序相同。
  3. 函数的定义和调用:解析代码中定义了一个函数 leafSimilar,通过传入两棵树的根节点,判断它们的叶子节点是否逆序。

题目解答方法的文字分析

题目要求判断两棵树的叶子节点是否逆序,可以通过深度优先搜索遍历树的叶子节点,并将叶子节点的值存入序列中。然后对比两个序列是否相同或者逆序。

本题解析中,通过定义了一个辅助函数 getLeafSequence,通过递归进行深度优先搜索,将叶子节点的值放入序列中。然后比较两个序列的长度是否相同,再逐个对比对应位置上的叶子节点的值。

本题解析所用的编程语言

本题解析所使用的编程语言是 JavaScript。

完整且正确的编程代码

在函数中,我们定义了一个辅助函数 getLeafSequence 来进行深度优先搜索。这个函数会遍历给定树的叶子节点,并将叶值添加到指定的序列中。

然后,我们通过调用 getLeafSequence 函数来获取两棵树的叶值序列 sequence1 和 sequence2。

最后,我们比较两个叶值序列的长度是否相等,以及对应位置上的叶值是否一一对应。如果长度不相等或者存在不匹配的叶值,说明叶子节点的顺序不是逆序,返回 false;否则,返回 true。

function leafSimilar(root1, root2) {
  // 辅助函数:深度优先搜索遍历叶子节点,返回叶值序列
  function getLeafSequence(root, sequence) {
    if (root === null) return;
    // 如果是叶子节点,则将叶值添加到序列中
    if (root.left === null && root.right === null) {
      sequence.push(root.val);
    }
    getLeafSequence(root.left, sequence);
    getLeafSequence(root.right, sequence);
  }
  
  // 初始化两棵树的叶值序列
  const sequence1 = [];
  const sequence2 = [];
  
  // 获取第一棵树的叶值序列
  getLeafSequence(root1, sequence1);
  // 获取第二棵树的叶值序列
  getLeafSequence(root2, sequence2);
  
  // 比较两个叶值序列是否相同
  if (sequence1.length !== sequence2.length) {
    return false;
  }
  for (let i = 0; i < sequence1.length; i++) {
    if (sequence1[i] !== sequence2[sequence2.length - 1 - i]) {
      return false;
    }
  }
  return true;
}
#面试高频TOP202#
题解 | 前端刷题 文章被收录于专栏

题目考察的知识点 题目解答方法的文字分析 本题解析所用的编程语言 完整且正确的编程代码

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务