هذه عملية شائعة لشجرة ثنائية. ملخص:
دعنا نضع بنية بيانات العقدة ، على النحو التالي:
نسخ رمز رمز على النحو التالي:
فئة treenode {
قيمة شار
treeNode Left = NULL ؛
treenode right = null ؛
treenode (char _val) {
this.val = _val ؛
}
}
1. عمق الشجرة الثنائية
يمكن إعادة تعويض ذلك ، ويتم العثور على عمق الشجرة الفرعية اليسرى ، ويمكن استخدام عمق شجرة الطفل اليمنى.
نسخ رمز رمز على النحو التالي:
// احصل على أقصى عمق
int static int getMaxDepth (treenode root) {{
إذا (الجذر == فارغ)
العودة 0 ؛
آخر {
int left = getMaxDepth (root.left) ؛
int right = getMaxDepth (root.richt) ؛
إرجاع 1 + Math.Max (يسار ، يمين) ؛
}
}
2. العرض الثنائي
استخدم قائمة الانتظار لاجتياز طبقة الأشجار الثنائية. بعد اكتمال الطبقة السابقة ، تم وضع جميع العقد في الطبقة التالية في قائمة الانتظار. عن طريق القياس ، يمكنك العثور على أقصى عرض للشجرة الثنائية في الطبقة التالية.
نسخ رمز رمز على النحو التالي:
// احصل على أقصى عرض
int static int getMaxWidth (timeode root) {{
إذا (الجذر == فارغ)
العودة 0 ؛
قائمة الانتظار <tar
int maxwitdth = 1 ؛
Queue.Add (الجذر) ؛
بينما (صحيح) {
int len = queue.size () ؛
إذا (len == 0)
استراحة؛
بينما (len> 0) {// إذا كانت الطبقة الحالية ، فهناك عقد
علاج t = queue.poll () ؛
لين- ؛
إذا (T.Left! = NULL)
Queue.Add (T.Left) ؛
إذا (T.Right! = NULL)
Queue.Add (T.Right) ؛
}
maxwitdth = math.max (maxwitdth ، queue.size ()) ؛
}
إرجاع maxwitdth.
}