二叉树中的非边界节点

时间:2015-05-28 04:16:48

标签: algorithm data-structures binary-tree

我有一个二叉树,我想打印所有非边界节点。 边界节点: - 所有叶节点+从根到leftest节点的路径上的所有节点+从根节点到最右边节点的所有节点。

我在树结构中使用额外的布尔值来确定它是否是边界节点,然后进行遍历和打印(如果不是边界节点)。有人可以提出一个更好的方法,因为它使用了一些额外的空间(尽管非常少)。

1 个答案:

答案 0 :(得分:3)

您可能会发现有用的一个观察结果是,二叉树中的非边界节点是(a)不是叶子的节点,而(b)是沿着节点的访问路径的那个节点,您是&#39我们向左迈出了一步,向右迈出了一步。因此,一种选择是进行正常的树遍历,跟踪您是否已经离开并沿途向右走。这是一些伪代码:

function printNonBoundaryNodesRec(root, goneLeft, goneRight) {
    if (root == null or root is a leaf) return;

    if (goneLeft and goneRight) print root.value
    printNonBoundaryNodesRec(root.left, true, goneRight);
    printNonBoundaryNodesRec(root.right, goneLeft, true);
}

function printNonBoundaryNodes(root) {
    printNonBoundaryNodesRec(root, false, false);
}

希望这有帮助!