如何判斷一棵樹是不是平衡二叉樹

平衡二叉樹

對於任意一個節點,左子樹和右子樹的高度差不超過1.滿二叉樹一定是平衡二叉樹.

解題思路:

在樹類問題上,遞歸函數使用起來很方便.它可以讓我們從一個節點上經過三次.利用這個特性可以解決大多數的問題.

我們可以先收集左樹信息,再收集右數信息然後返回到當前節點判斷該節點是否滿足要求.

在本題中,我們需要收集的信息是:左樹是否平衡,右樹是否平衡以及左樹和右樹的高度.

1-可能性分析: 判斷一棵樹是否爲平衡樹也就是判斷任意子樹是不是平衡術.

假設我們來到了節點X,判斷X是否爲平衡樹需要如下信息

     a-X的左子樹是不是平衡樹

     b-X的右子樹是不是平衡樹

     c-如果都平衡,左子樹和右子樹的高度是多少

2-設計遞歸返回結構

遞歸返回結構應該包含我們需要的 高度和是否平衡.

	class Res{
		int height;
		boolean isB;
		Res(int height,boolean isB){
			this.height = height;
			this.isB = isB;
		}
	}

3-設計遞歸過程

public static Res process(Node head){
	//1-基本的邊界值判斷
	if(head == null){
		return (0,true);
	}
	//3-左節點返回的值
	Res leftRes = process(head.left);
	//4-根據左節點的返回值做出判斷
	if(!leftRes.isB){
		return new Res(0,false);
	}
	//5-右節點的返回值
	Res rightRes = process(head.right)
	//6-同樣做出判斷
	if(!rightRes.isB){
		return new Res(0,false);
	}
	if(Math.abs(leftRes.height - rightRes.height) > 1){
		return new Res(0,false);
	}
	//2-當前節點符合條件,應該返回什麼
	return new Res(Math.max(leftRes.height,rightRes.height) + 1, true);
}

 

 

 

 

 

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