문제의 의미
이진 트리의 헤드 노드에 주어진 알려진 값은 모든 노드에 대해 동일, 최대 포함 된 노드는 두 개의 포크 탐색 트리를 찾아 나무의 헤드 노드로 돌아갑니다.
문제 해결
- postorder 과정에서 구현됩니다.
- 단계 나열 DP 트리에 의해 해결 단계. 세 가지 유형의 가능성 : 가장 왼쪽 서브 트리, 가장 큰 우측 하위 트리가, 현재 노드가 트리의 루트입니다.
- O의 시간 복잡도 (N)
트리 DP
전제를 사용하여
목표는 주제의 규칙을 해결하는 경우, 프로세스는 각각의 대답의 규칙에서 각 노드에서와 하위 트리의 루트 노드입니다 해결하고,의 특정 최종 답변 할 수 있습니다.
단계
- 가능성. 루트, 왼쪽 하위 트리보기 오른쪽 하위 트리 포인트.
- 그것은 존재하는 모든 레이어를 얻기 위해 필요한 변수를 나열합니다. 왼쪽 및 오른쪽 하위 트리를 통합합니다.
- 작성하는 재귀 함수에서 : basecase, 재귀에 대해, 바닥에 모든 변수를 제공하기 위해 업데이트의 가능성을 결정합니다.
모든
어떻게 그것은 클래스의 서브 클래스 미해결되었습니다. 서브 클래스는 예이어야하며 주요 OJ 측정 할 때 인스턴스 아니었다?
코드
public class ReturnType{
int min;//最小节点值
int max;//最大节点值
int maxSize;//最大BST树的大小
Node maxRoot;//最大BST树的根节点
ReturnType(int min,int max,int maxSize,Node maxRoot){
this.min=min;
this.max=max;
this.maxSize=maxSize;
this.maxRoot=maxRoot;
}
}
public class Main {
public static void main(String args[]) {
//test
Node root=new Node(10);
Node node1=new Node(11);
Node node2=new Node(14);
Node node3=new Node(11);
Node node4=new Node(15);
root.left=node1;
root.right=node2;
node2.left=node3;
node2.right=node4;
int maxSize=getMaxBST(root).maxSize;
System.out.println(maxSize);
}
public static ReturnType getMaxBST(Node root) {
if(root==null) {
return new ReturnType(Integer.MAX_VALUE,Integer.MIN_VALUE,0,null);
}
ReturnType lReturn=getMaxBST(root.left);
ReturnType rReturn=getMaxBST(root.right);
int min=getMin(root.val,lReturn.min,rReturn.min);
int max=getMax(root.val,lReturn.max,rReturn.max);
int maxSize=Math.max(lReturn.maxSize, rReturn.maxSize);
Node maxRoot=maxSize==lReturn.maxSize?lReturn.maxRoot:rReturn.maxRoot;
if(lReturn.maxRoot==root.left&&rReturn.maxRoot==root.right&&lReturn.max<root.val&&rReturn.min>root.val) {//
maxSize=lReturn.maxSize+rReturn.maxSize+1;
maxRoot=root;
}
return new ReturnType(min,max,maxSize,maxRoot);
}
private static int getMin(int... vals) {
int min=Integer.MAX_VALUE;
for(int val:vals) {
if(val<min) {
min=val;
}
}
return min;
}
private static int getMax(int... vals) {
int max=Integer.MIN_VALUE;
for(int val:vals) {
if(val>max) {
max=val;
}
}
return max;
}
}