📌  相关文章
📜  二叉树中叶子节点和内部节点之间的关系 - Javascript(1)

📅  最后修改于: 2023-12-03 15:36:03.285000             🧑  作者: Mango

二叉树中叶子节点和内部节点之间的关系

在二叉树中,节点可以分为两种类型:内部节点和叶子节点。内部节点是有子节点的节点,而叶子节点是没有子节点的节点。

二叉树中的叶子节点和内部节点有一些关系,比如:

  • 叶子节点的数量等于内部节点数量加1;
  • 每个非空二叉树都至少有两个叶子节点;
  • 如果一棵二叉树有n个节点,其中m个是叶子节点,那么它一定有n-m个内部节点。
Javascript实现

下面给出Javascript实现二叉树叶子节点和内部节点数量之间关系的代码片段。

  // 二叉树节点
  class TreeNode {
    constructor(val, left, right) {
      this.val = val;
      this.left = left;
      this.right = right;
    }
  }
  
  // 计算叶子节点和内部节点的关系
  function countLeafAndInternal(root) {
    if (!root) {
      return [0, 0];
    }
    
    const [leftLeaves, leftInternals] = countLeafAndInternal(root.left);
    const [rightLeaves, rightInternals] = countLeafAndInternal(root.right);
    
    const leaves = (root.left || root.right) ? leftLeaves + rightLeaves : 1;
    const internals = leftInternals + rightInternals + ((root.left && root.right) ? 1 : 0);
    
    return [leaves, internals];
  }

以上代码中,我们定义了一个TreeNode类表示二叉树节点,还定义了一个countLeafAndInternal函数来计算二叉树的叶子节点和内部节点之间的关系。

该函数使用递归的方式来计算,对于每个节点,我们都计算它左右子树的叶子节点数量和内部节点数量,然后根据一些条件来计算当前节点的叶子节点数量和内部节点数量。

使用该函数,我们可以很方便地计算二叉树的叶子节点和内部节点之间的关系了。例如,对于以下二叉树:

       1
     /   \
    2     3
   / \   /
  4   5 6

我们可以使用以下代码计算它的叶子节点和内部节点数量:

  const tree = new TreeNode(1, new TreeNode(2, new TreeNode(4), new TreeNode(5)), new TreeNode(3, new TreeNode(6)));
  const [leaves, internals] = countLeafAndInternal(tree);
  
  console.log('Leaves:', leaves); // 3
  console.log('Internals:', internals); // 3

以上代码输出的结果是:

Leaves: 3
Internals: 3

也就是说,该二叉树有3个叶子节点和3个内部节点,它们之间的关系是:$LeafNodes = InternalNodes + 1$。