Selles õpetuses saate teada binaarpuust ja selle erinevatest tüüpidest. Samuti leiate C, C ++, Java ja Pythoni binaarpuu toimivaid näiteid.
Binaarne puu on puu andmestruktuur, milles igal vanemsõlmel võib olla kuni kaks last. Näiteks,
Binaarne puuBinaarse puu tüübid
Täielik binaarne puu
Täisbinaarne puu on spetsiaalne kahendpuu tüüp, milles igal vanemsõlmel / sisesõlmel on kas kaks last või mitte ühtegi last.
Täielik binaarne puuLisateabe saamiseks külastage palun täielikku kahendpuud.
Ideaalne kahendpuu
Täiuslik binaarne puu on kahendpuu tüüp, milles igal sisesõlmel on täpselt kaks lapsesõlme ja kõik lehesõlmed on samal tasemel.
Ideaalne kahendpuuLisateabe saamiseks külastage täiuslikku kahendpuud.
Täielik binaarne puu
Täielik binaarne puu on täpselt nagu täielik binaarne puu, kuid sellel on kaks suurt erinevust
- Iga tase peab olema täielikult täidetud
- Kõik leheelemendid peavad kalduma vasakule.
- Viimasel leheelemendil ei pruugi olla õiget õde-venda, st täielik kahendpuu ei pea olema täielik kahendpuu.
Lisateabe saamiseks külastage palun täielikku binaarpuud.
Taandarenenud ehk patoloogiline puu
Taandarenenud või patoloogiline puu on puu, millel on üks laps kas vasakul või paremal.
Degenereerunud kahendpuuViltune binaarne puu
Viltune binaarne puu on patoloogiline / taandarenenud puu, milles puust domineerivad kas vasak- või parempoolsed sõlmed. Seega on viltust kahendpuud kahte tüüpi: vasak- ja parempoolne kahepoolne puu .
Viltune binaarne puuTasakaalus binaarne puu
See on kahendpuu tüüp, milles iga sõlme vasaku ja parema alampuu vahe on kas 0 või 1.
Tasakaalus binaarne puuLisateabe saamiseks külastage tasakaalustatud kahendpuud.
Binaarse puu esindus
Binaarse puu sõlme esindab struktuur, mis sisaldab andmeosa ja kahte viidet teistele sama tüüpi struktuuridele.
struct node ( int data; struct node *left; struct node *right; );
Binaarse puu esindus
Pythoni, Java ja C / C ++ näited
Python Java C C + # Binary Tree in Python class Node: def __init__(self, key): self.left = None self.right = None self.val = key # Traverse preorder def traversePreOrder(self): print(self.val, end=' ') if self.left: self.left.traversePreOrder() if self.right: self.right.traversePreOrder() # Traverse inorder def traverseInOrder(self): if self.left: self.left.traverseInOrder() print(self.val, end=' ') if self.right: self.right.traverseInOrder() # Traverse postorder def traversePostOrder(self): if self.left: self.left.traversePostOrder() if self.right: self.right.traversePostOrder() print(self.val, end=' ') root = Node(1) root.left = Node(2) root.right = Node(3) root.left.left = Node(4) print("Pre order Traversal: ", end="") root.traversePreOrder() print("In order Traversal: ", end="") root.traverseInOrder() print("Post order Traversal: ", end="") root.traversePostOrder()
// Binary Tree in Java // Node creation class Node ( int key; Node left, right; public Node(int item) ( key = item; left = right = null; ) ) class BinaryTree ( Node root; BinaryTree(int key) ( root = new Node(key); ) BinaryTree() ( root = null; ) // Traverse Inorder public void traverseInOrder(Node node) ( if (node != null) ( traverseInOrder(node.left); System.out.print(" " + node.key); traverseInOrder(node.right); ) ) // Traverse Postorder public void traversePostOrder(Node node) ( if (node != null) ( traversePostOrder(node.left); traversePostOrder(node.right); System.out.print(" " + node.key); ) ) // Traverse Preorder public void traversePreOrder(Node node) ( if (node != null) ( System.out.print(" " + node.key); traversePreOrder(node.left); traversePreOrder(node.right); ) ) public static void main(String() args) ( BinaryTree tree = new BinaryTree(); tree.root = new Node(1); tree.root.left = new Node(2); tree.root.right = new Node(3); tree.root.left.left = new Node(4); System.out.print("Pre order Traversal: "); tree.traversePreOrder(tree.root); System.out.print("In order Traversal: "); tree.traverseInOrder(tree.root); System.out.print("Post order Traversal: "); tree.traversePostOrder(tree.root); ) )
// Tree traversal in C #include #include struct node ( int item; struct node* left; struct node* right; ); // Inorder traversal void inorderTraversal(struct node* root) ( if (root == NULL) return; inorderTraversal(root->left); printf("%d ->", root->item); inorderTraversal(root->right); ) // Preorder traversal void preorderTraversal(struct node* root) ( if (root == NULL) return; printf("%d ->", root->item); preorderTraversal(root->left); preorderTraversal(root->right); ) // Postorder traversal void postorderTraversal(struct node* root) ( if (root == NULL) return; postorderTraversal(root->left); postorderTraversal(root->right); printf("%d ->", root->item); ) // Create a new Node struct node* createNode(value) ( struct node* newNode = malloc(sizeof(struct node)); newNode->item = value; newNode->left = NULL; newNode->right = NULL; return newNode; ) // Insert on the left of the node struct node* insertLeft(struct node* root, int value) ( root->left = createNode(value); return root->left; ) // Insert on the right of the node struct node* insertRight(struct node* root, int value) ( root->right = createNode(value); return root->right; ) int main() ( struct node* root = createNode(1); insertLeft(root, 2); insertRight(root, 3); insertLeft(root->left, 4); printf("Inorder traversal "); inorderTraversal(root); printf("Preorder traversal "); preorderTraversal(root); printf("Postorder traversal "); postorderTraversal(root); )
// Binary Tree in C++ #include #include using namespace std; struct node ( int data; struct node *left; struct node *right; ); // New node creation struct node *newNode(int data) ( struct node *node = (struct node *)malloc(sizeof(struct node)); node->data = data; node->left = NULL; node->right = NULL; return (node); ) // Traverse Preorder void traversePreOrder(struct node *temp) ( if (temp != NULL) ( cout << " " left); traversePreOrder(temp->right); ) ) // Traverse Inorder void traverseInOrder(struct node *temp) ( if (temp != NULL) ( traverseInOrder(temp->left); cout << " " right); ) ) // Traverse Postorder void traversePostOrder(struct node *temp) ( if (temp != NULL) ( traversePostOrder(temp->left); traversePostOrder(temp->right); cout << " " left = newNode(2); root->right = newNode(3); root->left->left = newNode(4); cout << "preorder traversal: "; traversePreOrder(root); cout << "Inorder traversal: "; traverseInOrder(root); cout << "Postorder traversal: "; traversePostOrder(root); )
Binaarpuu rakendused
- Andmetele lihtsaks ja kiireks juurdepääsuks
- Ruuteri algoritmides
- Hunniku andmestruktuuri juurutamiseks
- Süntaksipuu