자바 알고리즘 시리즈 12 - 이 진 트 리 의 최대 하위 트 리 와

8724 단어 자바
실현 사고: 이 진 트 리 의 뒷 순 서 를 이용 하여 옮 겨 다 니 는 결점 의 값 과 좌우 서브 트 리 와 의 값 을 더 한 결과 가 최대 치 보다 크 면 최대 치 를 업데이트 합 니 다.
코드 구현:
/**
     *      
     * @return              
     */
    public static BITNode constructTree(){
        BITNode root = new BITNode();
        BITNode node1 = new BITNode();
        BITNode node2 = new BITNode();
        BITNode node3 = new BITNode();
        BITNode node4 = new BITNode();
        root.data = 6;
        node1.data = 3;
        node2.data = 7;
        node3.data = 1;
        node4.data = 9;
        root.lchild = node1;
        root.rchild = node2;
        node1.lchild = node3;
        node1.rchild = node4;
        node2.lchild = node2.rchild = node3.lchild = node3.rchild = node4.lchild = node4.rchild = null;
        return root;
    }
/**
     *      
     * @param root    
     * @param maxRoot         
     * @return  root            
     */
    public static int findMaxSubTree(BITNode root,BITNode maxRoot){
        if(root == null){
            return 0;
        }
        // root         
        int lMax = findMaxSubTree(root.lchild,maxRoot);
        // root         
        int rMax = findMaxSubTree(root.rchild,maxRoot);
        int sum = lMax + rMax + root.data;
        // root                  
        if(sum > maxSum){
            maxSum = sum;
            maxRoot.data = root.data;
        }
        return sum;
    }

테스트:
public static void main(String[] args) {
        BITNode root = constructTree();
        BITNode maxRoot = new BITNode();
        findMaxSubTree(root,maxRoot);
        System.out.println("      :"+maxSum);
        System.out.println("        :"+maxRoot.data);
    }

좋은 웹페이지 즐겨찾기