Binarno drevo

V tej vadnici boste izvedeli več o binarnem drevesu in njegovih različnih vrstah. Prav tako boste našli delovne primere binarnega drevesa v C, C ++, Java in Python.

Binarno drevo je drevesna podatkovna struktura, v kateri ima lahko vsako nadrejeno vozlišče največ dva otroka. Na primer

Binarno drevo

Vrste binarnega drevesa

Polno binarno drevo

Polno binarno drevo je posebna vrsta binarnega drevesa, v katerem ima vsako nadrejeno vozlišče / notranje vozlišče dva ali nič podrejenih elementov.

Polno binarno drevo

Če želite izvedeti več, obiščite celotno binarno drevo.

Popolno binarno drevo

Popolno binarno drevo je vrsta binarnega drevesa, v katerem ima vsako notranje vozlišče natanko dve podrejeni vozlišči in so vsa vozlišča listov na isti ravni.

Popolno binarno drevo

Če želite izvedeti več, obiščite popolno binarno drevo.

Popolno binarno drevo

Popolno binarno drevo je tako kot polno binarno drevo, vendar z dvema glavnima razlikama

  1. Vsak nivo mora biti popolnoma zapolnjen
  2. Vsi elementi lista se morajo nagniti proti levi.
  3. Zadnji element lista morda nima pravega brata ali sestre, tj. Popolno binarno drevo ne sme biti polno binarno drevo.
Popolno binarno drevo

Če želite izvedeti več, obiščite celotno binarno drevo.

Izrojeno ali patološko drevo

Izrojeno ali patološko drevo je drevo z enim samim otrokom levo ali desno.

Izrojeno binarno drevo

Nagnjeno binarno drevo

Poševno binarno drevo je patološko / izrojeno drevo, v katerem v drevesu prevladujejo leva vozlišča ali desna vozlišča. Tako obstajata dve vrsti poševnih binarnih dreves: levo poševno binarno drevo in desno poševno binarno drevo .

Nagnjeno binarno drevo

Uravnoteženo binarno drevo

To je vrsta binarnega drevesa, pri kateri je razlika med levim in desnim poddrevesom za vsako vozlišče bodisi 0 bodisi 1.

Uravnoteženo binarno drevo

Če želite izvedeti več, obiščite uravnoteženo binarno drevo.

Predstavitev binarnega drevesa

Vozlišče binarnega drevesa predstavlja struktura, ki vsebuje podatkovni del in dva kazalca na druge strukture istega tipa.

 struct node ( int data; struct node *left; struct node *right; ); 
Predstavitev binarnega drevesa

Primeri Python, Java in C / C ++

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); )   

Aplikacije binarnega drevesa

  • Za enostaven in hiter dostop do podatkov
  • V algoritmih usmerjevalnika
  • Za izvajanje strukture podatkov o kopici
  • Sintaksno drevo

Zanimive Članki...