如何在二叉搜索树中找到仅由1组成的根最深的路径?

时间:2011-05-24 12:52:45

标签: algorithm data-structures binary-tree

我们有一个仅由0和1组成的二叉树(不是BST)。我们需要找到最深的1,其中一条路径只有1的

来源:亚马逊采访问答

1 个答案:

答案 0 :(得分:9)

public static int findMaxOnesDepth(Node root){

        if(root != null && root.getValue() == 1){
                 return Math.max(1 + findMaxOnesDepth(root.getLeft()), 
                          1 + findMaxOnesDepth(root.getRight());
        }
        else {
            return 0;
        }
}

如果您所在的节点为'0',那么'1'的深度为0.否则,如果您所在的节点为'1',则将两者的最大'一个深度'加1你的左右儿童 - 并返回最多的儿童。

上面的代码找到了长度,为了找到路径上的实际节点,你可以用一个列表来跟踪这个

public static ArrayList<Node> findLongestOnesPath(Node root){

       ArrayList<Node> currStack = new ArrayList<Node>();

      if( root != null && root.getValue() == 1){

          currStack.add(root);

          ArrayList<Node> leftStack = findLongestOnesPath(root.getLeft());
          ArrayList<Node> rightStack = findLongestOnesPath(root.getRight());

          if(leftStack.size() > rightStack.size()){
                currStack.addAll(leftStack);
          }
          else{
              currStack.addAll(rightStack);
          }

      }

      return currStack;
}