二叉樹的平衡判斷(Java)

問題描述:
如果某二叉樹任意節點的左右子樹的深度相差不能超過1,那麼它就是一顆平衡二叉樹。請事先未完成的checkBalance函數,判斷給定的輸入節點是否爲平衡二叉樹。
bool checkBalance(Node* root)

class TreeNode{
	int val;
	TreeNode left;
	TreeNode right;
	TreeNode(int val){
		this.val = val;
		left = null;
		right = null;
	}
	TreeNode(int val,TreeNode left,TreeNode right){
		this.val = val;
		this.left = left;
		this.right = right;
	}
}

public class Solution1 {
	
	boolean checkBalance(TreeNode root) {
		if(root == null)
			return true;
		
		int right = deep(root.right);
		int left = deep(root.left);
		if(right-left > 1 || left - right > 1)
			return false;
		
		return checkBalance(root.right) && checkBalance(root.left);
	}
	
	int deep(TreeNode root) {
		if(root == null)
			return 0;
		int deepRight = deep(root.right);
		int deepLeft = deep(root.left);
		return 1 + (deepRight>deepLeft?deepRight:deepLeft);
	}

	public static void main(String[] args) {
		
		TreeNode val_2 = new TreeNode(2);
		TreeNode val_4 = new TreeNode(4);
		TreeNode val_3 = new TreeNode(3,val_2,val_4);
		//TreeNode root = new TreeNode(5,val_3,null);
		TreeNode val_6 = new TreeNode(6);
		TreeNode root = new TreeNode(5,val_3,val_6);
		
		/*
		TreeNode val_5 = new TreeNode(5);
		TreeNode val_4 = new TreeNode(4,null,val_5);
		TreeNode val_2 = new TreeNode(2,null,val_4);
		TreeNode val_7 = new TreeNode(7);
		TreeNode val_6 = new TreeNode(6,null,val_7);
		TreeNode val_3 = new TreeNode(3,null,val_6);
		TreeNode root = new TreeNode(1,val_2,val_3);
		*/
		
		
		Solution1 so1 = new Solution1();
		System.out.println(so1.checkBalance(root));

	}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章