📅  最后修改于: 2023-12-03 15:07:57.507000             🧑  作者: Mango
在二叉树中,从根节点到叶节点的路径是指从根节点开始,经过一系列边连接的节点构成的路径,直到到达叶节点为止。本文将介绍如何在二叉树中打印从根到叶的最长路径。
可以通过深度优先遍历的方法来求解从根节点到叶节点的最长路径。
具体过程如下:
以下是Java代码实现:
public List<TreeNode> printPath(TreeNode root) {
List<TreeNode> maxPath = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
int maxDepth = 0;
int depth = 0;
TreeNode prev = null;
while (root != null || !stack.isEmpty()) {
if (root != null) {
depth++;
stack.push(root);
root = root.left;
} else {
TreeNode peekNode = stack.peek();
if (peekNode.right != null && prev != peekNode.right) {
root = peekNode.right;
} else {
if (peekNode.left == null && peekNode.right == null && depth > maxDepth) {
maxDepth = depth;
maxPath = new ArrayList<>(stack);
}
depth--;
prev = stack.pop();
}
}
}
return maxPath;
}
其中,TreeNode为二叉树的节点,具体代码中未给出。
对于一颗n个节点的二叉树,每个节点最多入栈一次,出栈一次,因此时间复杂度为O(n)。
[1] https://www.geeksforgeeks.org/print-the-longest-path-from-root-to-leaf-in-a-binary-tree/