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

问题描述

| 我们有一棵仅由0和1组成的二叉树(不是BST)。我们需要找到最深的1,其根路径仅由1组成 资料来源:亚马逊访谈Q     

解决方法

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;
}