ကျနော်တို့ Tree Data Structure ကဘာလဲကနေစလိုက်ကြရအောင်။ Tree က Non-linear Data Structure တခုဖြစ်တယ်။ မဖတ်ရသေးရင် Data Structure အမျိုးအစားတွေအကြောင်း ဒီမှာ ရေးထားတာရှိတယ်။ Tree မှာ Nodes တွေအများကြီးပါတယ်။ Nodes တွေကနောက်ထက် Nodes တွေကို Point လုပ်နိုင်တယ်။
Tree data structure က Hierarchical (အထက်အောက်) သွားတာ။ အပင်ကို ပြောင်းပြန်လှန်လိုက်တဲ့ပုံစံပေါ့။ Root ကအပေါ်ဆုံးရောက်သွားပီးတော့ leaves တွေကအောက်ဆုံးရောက်သွားတာမျိုး။ အောက်ကပုံလိုမျိုး။

Tree အကြောင်းသိပီဆိုရင် Tree နှင့်သက်ဆိုင်တဲ့အခေါ်အဝေါ်တွေကိုလေ့လာဖို့ အောက်က Example tree ကိုတချက်ကြည့်ကြည့်လိုက်ရအောင်။

ဒီ tree မှာဆို A က Parent Node နောက် B နှင့် C ကသူ့ရဲ့ Child Node တွေပေါ့။ အဓိကပြောချင်တာက Parent Child ဘယ်လိုမျိုးခေါ်လဲပြောချင်တာ။ အောက်မှာ B က Parent ဖြစ်သွားတဲ့အခါမှာ D နှင့် E က Child အဲ့လိုဘဲ C က Parent ဖြစ်သွားတဲ့အခါမှာ F က Child ဖြစ်သွားတယ်။

ကျနော်အပေါ်ကပုံတွေရှင်းပြသွားတဲ့အထဲမှာ Node ဆိုပီးသုံးသွားတယ်။ အဲ့ Node ဆိုတာက ဒီ tree ထဲမှာရှိတဲ့အရာတွေကိုပြောချင်တာပေါ့။ ကျနော်တို့ဥပမာ ပုံထဲမှာဆို circle တွေအကုန်လုံးက Node တွေ။
နောက်ထက်သိထားရမှာက Root node ပေါ့။ Root node ဆိုတာဟိုးအပေါ်ထိပ်ဆုံးက Node ကို Root node လို့ခေါ်တာ။ ကျနော်တို့ဥပမာမှာဆိုရင် A က Root node ပေါ့။
နောက်ထက်အခေါ်အဝေါ်တခုက Leaves. သူက မြန်မာလိုပြောမယ်ဆို အကိုင်းအဖျားပေါ့။ သူ့အောက်မှာ Children မရှိတော့တဲ့ကောင်တွေပေါ့။ တချို့ကလဲ External nodes လို့ခေါ်တယ်။ ကျနော်တို့ဥပမာ Tree မှာဆိုရင် D, E, F တွေက Leave nodes တွေပေါ့။
နောက်ထက်သိရမယ့်အခေါ်အဝေါ်က Edges/Branches။ Node တခုနှင့်တခု ဆက်ဆက်နေတာကိုခေါ်တဲ့အခေါ်အဝေါ်ပေါ့။
နောက်တခုက Subtree ။ သူက Tree ကိုမှ နောက်ထက် Subtree တခုအဖြစ်ခွဲတာကိုပြောတာ ကျနော်တို့ဥပမာကနေ နောက်ထက် Subtree တခုထုတ်မယ်ဆို အောက်ဖော်ပြပါပုံအတိုင်းနောက်ထက် Subtree တခုရမှာပေါ့။ ဘယ်ဘက်က Original Tree အဲ့ကောင်ကိုမှ နောက်ထက် Subtree တခုခွဲလိုက်တာ ညာဘက်က Tree ရသွားတယ်။

နောက်ဆုံး Tree နှင့်ပတ်သတ်ပီးပြောချင်တာကတော့ Depth နှင့် Height ပါ။ ထားပါတော့ ကျနော်တို့က Tree ထဲမှာရှိတဲ့ Node တခုရဲ့ Depth ကိုသိချင်တယ် Node D ဘဲထားပါတော့။ အဲ့ကောင်ကိုဘယ်လိုတွက်မလဲဆိုရင် Root Node ကနေပီးတော့ ကျနော်တို့သိချင်တဲ့ Node ဖြစ်တဲ့ Node D ထိကြားမှာရှိတဲ့ Edges ကိုရှာမယ်ဆိုရင် 2 ပေါ့။ Root node ရဲ့ Depth က 0။ အောက်ကပုံလေးတချက်ကြည့်ကြည့်လိုက်ရင်ပိုမြင်မယ်ထင်တယ်။

နောက်တခုက Height of node သူကကြတော့ ကိုယ်သိချင်တဲ့ Node ကနေ Leaf ထိအရှည်ဆုံး Path. ဥပမာ Node B ရဲ့ Height က 2။ ပုံကြည့်ရင်ပိုပီးရှင်းသွားမယ်။

ဟိုးအောက်ဆုံး Leaf Node ရဲ့ Hight ကတော့ 0။ Tree ရဲ့ Hight ဆိုရင်တော့ 3 ပေါ့။ ဟိုးအပေါ်ဆုံး Root node ကနေဟိုးအောက်ဆုံး Leaf မှာရှိတဲ့ Edges တွေကိုရေလိုက်မယ်ဆိုရင် 3 ဖြစ်တဲ့အတွက်ကြောင့်မလို့ပေါ့။
Tree height နှင့် Depth ကတူသလိုလိုထင်သွားတက်ပါတယ်။ မတူပါဘူး။ မရှင်းသေးရင်အပေါ်မှာပြန်ဖတ်ကြည့်ပါ။
အခုဆိုရင်ကျနော်တို့ Tree ဆိုတာဘာလဲသိပီ သူ့အခေါ်အဝေါ်တွေကိုလဲ ကောင်းကောင်းနားလည်သွားပီဆိုတော့ Tree data structrue ကို Implement လုပ်လိုက်ကြရအောင်။
class TreeNode {
constructor(data) {
this.data = data;
this.children = [];
}
addChild(childNode) {
this.children.push(childNode);
}
removeChild(childNode) {
this.children = this.children.filter(child => child !== childNode);
}
}
// Example Usage
let root = new TreeNode('Root');
let child1 = new TreeNode('Child 1');
let child2 = new TreeNode('Child 2');
root.addChild(child1);
root.addChild(child2);
console.log(root);
Implementation ကရှင်းပါတယ်။ ကိုယ်ကဒီ Tree သဘောသဘာဝကိုသေချာနားလည်တယ်ဆိုရင် တခါလောက် Implementation မြင်ဖူးတာနဲ့ကိုယ်တိုင်ပြန် Implement လုပ်နိုင်လောက်တယ်။
မိတ်ဆက်ဆိုတော့ဒီလောက်ပါဘဲ။ နောက်ပိုင်းမှာ Tree traversal နှင့်တခြား Tree related တွေထက်ရေးပါဦးမယ်။