📅  最后修改于: 2023-12-03 14:54:27.728000             🧑  作者: Mango
在二叉树中,叶节点指的是没有子节点的节点。而我们需要打印位于叶节点上方的节点。可以采用深度优先搜索的方式进行遍历。
具体思路如下:
从二叉树的根节点开始遍历,当遍历到一个叶节点时,返回上一个非叶节点。
遍历到一个非叶节点时,在继续遍历右子树前,先将该节点的左子树中的非叶节点和叶节点都打印出来。
然后继续遍历右子树,重复步骤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);
}
}
}
以上代码采用递归的方式进行深度优先搜索,当遇到叶节点时,会返回其父节点。当父节点的左子树或右子树都不为空时,说明还有非叶节点需要打印输出,递归遍历其子树即可。
使用时,只需要传入二叉树的根节点即可调用该函数进行遍历,函数会自动将位于叶节点上方的节点打印输出。