ในปัญหานี้ เราได้รับไบนารีทรี และเราต้องพิมพ์ระนาบสองมิติออกมา
Binary Tree เป็นต้นไม้พิเศษที่ทุกโหนดมีโหนดย่อยสูงสุดสองโหนด ดังนั้น ทุกโหนดจึงเป็นโหนดปลายสุดหรือมีโหนดย่อยหนึ่งหรือสองโหนด
ตัวอย่าง
มาดูตัวอย่างเพื่อทำความเข้าใจหัวข้อกันดีกว่า −
ผลลัพธ์ -
7 4 5 1 3 8
ดังที่เราได้เห็นในตัวอย่างแล้ว โหนดของต้นไม้ถูกพิมพ์ในหน้าจอเอาต์พุต 2 มิติในแนวนอน
ที่นี่เราพลิกต้นไม้ไปประมาณ 90o
เรามาดูกันว่าต้นไม้แนวนอนใหม่ประกอบด้วยอะไร
-
โครงสร้างข้อมูลต้นไม้ถูกจัดเก็บในลักษณะแนวนอนซึ่งรวมถึง
-
รากที่ตำแหน่งที่ 1 ในมุมมองแนวนอน n เส้นใต้เส้นเริ่มต้น นั่นคือ root จะอยู่ที่จุดเริ่มต้นของบรรทัดที่ n
-
ระดับใหม่ของต้นไม้อยู่ในบรรทัด n+i และ n-i และที่ i เว้นวรรคห่างจากจุดเริ่มต้นของบรรทัด
-
และโหนดใบขวาสุดของต้นไม้จะถูกพิมพ์ในบรรทัดแรก โดยที่โหนดซ้ายสุดของต้นไม้จะพิมพ์อยู่ที่บรรทัดสุดท้าย
-
ตัวอย่าง
มาสร้างโปรแกรมตามตรรกะนี้กันเถอะ -
#include<bits/stdc++.h> #include<iostream> using namespace std; #define COUNT 10 class Node{ public: int data; Node* left, *right; Node(int data){ this->data = data; this->left = NULL; this->right = NULL; } }; void printTree(Node *root, int space){ if (root == NULL) return; space += COUNT; printTree(root->right, space); for (int i = COUNT; i < space; i++) cout<<"\t"; cout<<root->data<<"\n"; printTree(root->left, space); } int main(){ Node *root = new Node(43); root->left = new Node(25); root->right = new Node(67); root->left->left = new Node(14); root->left->right = new Node(51); root->right->left = new Node(26); root->right->right = new Node(97); root->left->left->left = new Node(81); root->left->left->right = new Node(49); root->left->right->left = new Node(07); root->left->right->right = new Node(31); root->right->left->left = new Node(29); root->right->left->right = new Node(13); root->right->right->left = new Node(59); root->right->right->right = new Node(16); printTree(root, 0); return 0; }
ผลลัพธ์
16 97 59 67 13 26 29 43 31 51 7 25 49 14 81