Bir ikili ağaç EN BÜYÜK ikili arama ağacı:
Bu sorunu ele iki yolu vardır,
ı) büyük BST) bir düğüm itibaren tüm çocuklar BST koşulunu karşılamak gerekmez (uyarılmış değil
ii) büyük BST), bir düğümden, tüm çocuk TSİ koşulu karşılayacak (indüklenen
Biz burada (Not Bağlı) büyük BST hakkında tartışacağız. Biz bu çözmek için aşağıdan yukarıya yaklaşımı (Mesaj sipariş geçişi) takip edecektir.
a) yaprak düğümü Erişim
b) yapraktan bir ağaç düğüm () içinde, aşağıdaki alanlar içeren bir TreeNodeHelper nesne döndürür.
public static class TreeNodeHelper {
TreeNode node;
int nodes;
Integer maxValue;
Integer minValue;
boolean isBST;
public TreeNodeHelper() {}
public TreeNodeHelper(TreeNode node, int nodes, Integer maxValue, Integer minValue, boolean isBST) {
this.node = node;
this.nodes = nodes;
this.maxValue = maxValue;
this.minValue = minValue;
this.isBST = isBST;
}
}
c) İlk yaprak düğümünden, düğümler = 1, MINVALUE = MaxValue = node.data isBST = doğru. o BST koşulunu karşılayan Ve eğer daha da düğümler artırılacak sayısı.
d) Bu yardımı ile, geçerli düğüme BST durumunu kontrol edecektir. Ve biz köküne kadar aynı tekrar edecektir.
e) her bir düğümden iki nesne döndürülür. Geçen maksimum BST ve güncel BST tatmin edici düğümler için başka biri için bir tane. Yani (sağ alt ağaç için 2 sol alt ağaç ve 2) (yaprak üzerinde) her bir düğüm (2 + 2) = 4 ila nesneler karşılaştırılacak ve iki iade edilecektir.
f) kökünden nihai maksimum düğüm nesnesi büyük BST olacak
SORUN:
Bu yaklaşımda bir sorun vardır. Bu yaklaşımı izlerken bir alt ağaç geçerli düğüme BST koşulunu sağlayan değilse, biz sadece alt ağacı göz ardı edemeyiz (hatta düğümlerin az sayıda vardır). Örneğin
55
\
75
/ \
27 89
/ \
26 95
/ \
23 105
/ \
20 110
yaprak düğümleri (20.110) nesneleri düğüm (105) ile test edilecek itibaren, koşulu karşılayan. o düğüm ulaştığında Ama (95) yaprak düğüm (20) BST koşulunu tatmin etmiyor. Bu çözeltiye, (ma kaynaklı) BST için beri koşulu karşılayan düğümü (105) ve düğümü (110), göz ardı edilmemelidir. Yani düğüm (95) biz BST durumunu test tekrar sarfınazar ve bu düğümleri (105, 110) yakalamak zorundayız.
Bu uygulama için komple kod bu bağlantıyı mevcuttur
https://github.com/dineshappavoo/Implementation/tree/master/LARGEST_BST_IN_BT_NOT_INDUCED_VER1.0