두 갈래 나무 균형 검사의 프로그래머 면접 명작

1223 단어
제목 설명
하나의 함수를 실현하고 두 갈래 나무의 균형이 맞는지 검사한다. 균형의 정의는 다음과 같다. 나무 중의 임의의 결점에 대해 두 갈래 나무의 높이차는 1을 초과하지 않는다.
트리 루트 끝점을 가리키는 포인터 지정 TreeNode*
root
이 나무의 균형이 맞는지 아닌지를 나타내는 bool로 돌아가십시오
이 문제는 채택할 수 있다
뒤돌아 다니다
의 방식을 반복적으로 반복한다.
lh
조건에 맞는 현재 노드 왼쪽 트리의 깊이입니다.
rh
조건에 맞는 현재 노드의 깊이가 있습니다.
매번 잎 노드에서 시작하여 귀속의 특성에 따라 순서대로 이 두 갈래 나무의 균형 여부를 판단한다
코드는 다음과 같습니다.
public static class TreeNode {
	    int val = 0;
	    TreeNode left = null;
	    TreeNode right = null;
	    public TreeNode(int val) {
	        this.val = val;
	    }
	}
	
	public static boolean isBalance(TreeNode root) {
            boolean[] res =new boolean[1];
            res[0]=true;
            int level=1;
            getHeight(root,level,res);
            return res[0];
		
    }

	private static int getHeight(TreeNode root, int level, boolean[] res) {
		   if(root==null){
			   return level;
		   }
  		   int lh =getHeight(root.left, level+1,res);
		   if(!res[0]){
			   return level;
		   }
		   int rh =getHeight(root.right,level+1,res);
		   if(!res[0]){
			   return level;
		   }
		   if(Math.abs(lh-rh)>1){
			   res[0]=false;
		   }
		   return Math.max(lh, rh);
	}

좋은 웹페이지 즐겨찾기