📜  打印位于叶节点上方的节点(1)

📅  最后修改于: 2023-12-03 14:54:27.728000             🧑  作者: Mango

打印位于叶节点上方的节点

在二叉树中,叶节点指的是没有子节点的节点。而我们需要打印位于叶节点上方的节点。可以采用深度优先搜索的方式进行遍历。

具体思路如下:

  1. 从二叉树的根节点开始遍历,当遍历到一个叶节点时,返回上一个非叶节点。

  2. 遍历到一个非叶节点时,在继续遍历右子树前,先将该节点的左子树中的非叶节点和叶节点都打印出来。

  3. 然后继续遍历右子树,重复步骤2。

下面是使用Java语言实现的示例代码:

public void printNonLeafNodesAboveLeaves(TreeNode root) {
    if (root == null) return;
    if (root.left == null && root.right == null) return;

    if (root.left != null) {
        if (root.left.left == null && root.left.right == null) {
            System.out.println(root.val);
        } else {
            printNonLeafNodesAboveLeaves(root.left);
        }
    }

    if (root.right != null) {
        if (root.right.left == null && root.right.right == null) {
            System.out.println(root.val);
        } else {
            printNonLeafNodesAboveLeaves(root.right);
        }
    }
}

以上代码采用递归的方式进行深度优先搜索,当遇到叶节点时,会返回其父节点。当父节点的左子树或右子树都不为空时,说明还有非叶节点需要打印输出,递归遍历其子树即可。

使用时,只需要传入二叉树的根节点即可调用该函数进行遍历,函数会自动将位于叶节点上方的节点打印输出。