从给定节点到二叉树中的根的路径

时间:2018-07-24 19:15:13

标签: java recursion binary-tree

一段时间以来,我一直在试图解决这个问题,但我并没有真正解决这个问题。本质上,给定一些二叉树和该树上的一个节点,您将如何找到从该给定节点到根的路径?

有人对我如何实现这一点有想法吗?任何输入将不胜感激,新手编码员表示衷心的感谢。

1 个答案:

答案 0 :(得分:0)

为了找到从一个节点到另一个节点的路径,您必须递归地遍历树从源节点到其子节点,它们的子节点,依此类推,直到到达目标节点为止。到达目标节点后,您需要回溯将您带到该目标节点的节点的路径回到根。一种方法是修改 pre-order遍历的版本,在该版本中,先检查根,然后检查左子树,再检查右子树。

public boolean getPath(root, value){
    if(root == null){
        return false;
    }
    if(root.value === value){
        System.out.println(root.value);
        return true;
    }
    int onPath = getPath(root.left, value);
    if(onPath){
        System.out.println(root.value);
        return true;
    }
    onPath = getPath(root.right,value);
    if(onPath){
        System.out.println(root.value);
        return true;
    }
    return false; //a path was never found
} 

在上述方法中,我们将root的值与目标value进行比较。如果它们不相等,我们检查左子树。如果目标不在左子树中,则检查右子树。如果仍未找到目标,则返回false,以便在返回递归调用堆栈时,可以让节点的父节点知道从该节点到目标的路径。但是,如果找到了目的地,则我们返回true,以便在返回递归调用堆栈时可以告诉节点的父节点及其父节点,依此类推,已经找到了路径。