題目:輸入乙個正數陣列,判斷該陣列是不是某二叉查詢樹的後序遍歷結果。如果是,返回true,如果不是返回false
思路:1.分治法:
分解:找到乙個pivot,判斷p到pivot結點以及pivot到q-1結點的兩個子串行是否滿足條件。
合併:當兩個子串行滿足條件後,判斷第乙個子串行的結點是否都小於根結點,第二個子串行的結點是否等大於根結點。
2.如何找到該pivot。
後序遍歷結果根結點在最後,那麼從最後乙個序列開始往前,找到第乙個小於該結點的結點,令其為pivot。當發現只要滿足該條件後第二個子串行必然滿足條件,所以需要判斷第乙個子串行是否都小於根結點。
**如下:
int findpivot(int*a ,int p ,int q)
}bool isright = ispostree(a,r+1,q-1);
return (isleft&&isright&&leftvalued);
} return true;
}
判斷整數序列是不是二叉查詢樹的後序遍歷結果
定義 二叉排序樹 binary sort tree 又稱二叉查詢樹。它或者是一棵空樹 或者是具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 2 若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 3 左 右子樹也分別為二叉排序樹。判斷給定序列是否為二叉查詢樹...
判斷二叉樹是不是平衡
題目 輸入一棵二叉樹的根結點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意結點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。例如下圖 中的二叉樹就是一棵平衡二叉樹 上面的 固然簡潔,但我們也要注意到由於乙個節點會被重複遍歷多次,這種思路的時間效率不高。例如在函式 isbalance 中輸入...
判斷是不是平衡二叉樹
問題 給出一棵二叉樹,判斷它是不是二叉樹。乙個比較容易想到的做法是,採用動態規則的方法依次求出每乙個節點的左子樹深度和右子樹深度,兩者相減,絕對值大於 1 則不是平衡樹。為了避免重複計算節點的深度,應該用後序遍歷的方法,即先計算子節點的深度,再計算當前節點的深度,這樣不會出現重複計算。如下 stru...