এই জাতীয় জিনিসগুলিতে, পিছনের দিকে চিন্তা করা প্রায়শই সহজ, তাই প্রথমে আপনার কী প্রয়োজন তা বিবেচনা করুন। আপনার বিবরণ থেকে, আসুন তাদের তালিকা দিন:
- recursion
- বৈধতা
- সম্পূর্ণ নোডের গণনা
ঠিক আছে, এটি মোটামুটি সংক্ষিপ্ত তালিকা, এটি পরিচালনাযোগ্য হওয়া উচিত। আসুন একটি খালি পদ্ধতি দিয়ে শুরু করুন এবং আমি কী ঘটতে হবে তার বিবরণ যুক্ত করব।
valid_bst () {
}
এখন বৈধতা। আপনি কিভাবে বৈধতা পরীক্ষা করবেন? আড্ডায় আপনি বলেছিলেন যে একটি গাছ "যদি ... সমস্ত বাম শিশু পিতামাতার চেয়ে কম হয় এবং ডান সন্তানেরা পিতামাতার চেয়ে বড় হয়" " আমি নিশ্চিত যে আপনিও সাম্যকে মঞ্জুর করতে চেয়েছিলেন। হবে t.left.value <= t.value <= t.right.value
।
valid_bst () {
This node is valid if t.left.value <= t.value <= t.right.value
}
তবে যদি বাচ্চাদের একজন নিখোঁজ হয়? আপনি যা বলেছেন তা থেকে, আমি বিশ্বাস করি যে আপনি জানেন যে নোডটি এখনও কার্যকর (যদি উভয়ই নিখোঁজ থাকে) missing আসুন এটি যোগ করুন, সামান্য পুনর্গঠন:
valid_bst () {
This node is valid to the left if
there is no left child or
it is no greater than the current node.
This node is valid to the right if
there is no right child or
it is no less than the current node.
This node is valid overall if it is valid to the left and right.
}
ঠিক আছে, আমরা এখন জানি যে এই নোডটি বৈধ কিনা। পুরো গাছটি বৈধ কিনা তা আমরা কীভাবে পরীক্ষা করব? এটি কোনও অ্যারেতে নেই, সুতরাং আমরা সম্ভবত রৈখিকভাবে এটি লুপ করতে / চাই না। আপনার নিয়োগটি উত্তর দেয়: পুনরাবৃত্তি। কিন্তু আমরা কীভাবে পুনরাবৃত্তি ব্যবহার করে উত্তর জোগ করব? আমাদের কাছে এই নোডটি বৈধ কিনা, এবং বাম এবং ডান নোডগুলি বৈধ কিনা তা জিজ্ঞাসা করে ফলাফলগুলির তিনটি টুকরো অ্যাক্সেস রয়েছে। স্পষ্টতই গাছটি কেবলমাত্র বৈধ যদি সেগুলির তিনটিই সত্য।
valid_bst () {
This node is valid to the left if
there is no left child or
it is no greater than the current node.
This node is valid to the right if
there is no right child or
it is no less than the current node.
This node is valid overall if it is valid to the left and right.
Is the left child valid?
Is the right child valid?
This tree is only valid if this node and both its children are.
}
আপনি যদি মনোযোগ দিচ্ছেন তবে এটি আমাদের ফাংশনটি কী ফিরিয়ে নিতে হবে তা আমাদের জানায়।
এখন, আমরা কীভাবে গণনা একীভূত করব? আপনি কী বলেছেন ("বাম এবং ডান উভয় সন্তানের নোড সহ একটি পিতামাতার নোড"), এবং এটি বাস্তব কোডে অনুবাদ করা শক্ত হওয়া উচিত নয়। সেই শর্তটি সন্তুষ্ট কিনা এবং উপযুক্তভাবে কাউন্টারকে বাড়িয়ে দিন কিনা তা পরীক্ষা করুন। কেবল মনে রাখবেন এটি এমন কোথাও থাকতে হবে যেখানে এটি প্রতিবার পৌঁছে যাবে it
এবং অবশ্যই আমি পুনরাবৃত্তি থামার শর্ত এবং নাল জন্য চেকের মতো কিছু বিবরণ রেখেছি left
<
নোডগুলিতে কীভাবে সংজ্ঞায়িত করা হয়?