1、題目
輸入一顆二叉樹的根節點,判斷該樹是不是平衡二叉樹。如果某二叉樹中的任意節點的左、右子樹的深度相差不超過1,那麼它就是一顆平衡二叉樹。
輸入引數:二叉樹的根節點,指向二叉樹深度的int型指標
輸出結果:true 或者 false
2、解題
這道題的關鍵在於如何在只遍歷一次二叉樹的情況下,對是否是平衡二叉樹進行判定
由於平衡二叉樹取決於左右子樹的深度之差,所以我們想到使用後序遍歷演算法,先遍歷左右子樹,在遍歷每個節點的時候記錄它的深度,然後對節點是否平衡進行判定。
解題的具體步驟:
若左右子樹**現不平衡的情況,在函式最後返回false
3、**
bool isbalancedtree
(binarytreenode* proot,
int* pdepth)
//先遍歷左右子樹
int left, right;if(
isbalancedtree
(proot->m_pleft,
&left)
&&isbalancedtree
(proot->m_pright,
&right))}
//若左右子樹**現不平衡的情況,最後返回false
return false;
}
4、注意點 劍指offer之面試題9 4 矩形覆蓋
題目描述 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?思路 用數學歸納的思想分析,得出規律。牛客網提交 public class solution if target 2 return init target int...
劍指offer之面試題16 反轉鍊錶
題目描述 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。思路 借助圖形來分析一下反轉鍊錶需要改變哪些指標。假設某一時刻,經過若干操作,我們已經把h點之前的指標調整完畢,現在反轉i指標指向的結點。由圖可知,為了防止指標的斷開,需要儲存i的next指標,為了完成反轉,需要知道i的前乙個指標prev,當然...
劍指offer面試題7
面試題7 用兩個棧實現佇列 using namespace std template class cqueue 預備知識 佇列 佇列也是一種常見的資料結構 特點是先進先出 fifo 在stl中有stack和queue兩個容器 template class stack 成員函式 empty size ...