A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Percurso não recursivo e impressão em árvores binárias Drozdek.

Apresentações semelhantes


Apresentação em tema: "Percurso não recursivo e impressão em árvores binárias Drozdek."— Transcrição da apresentação:

1 Percurso não recursivo e impressão em árvores binárias Drozdek

2 Implementação Java Drozdek

3 3 Classe usada para ilustração public class BSTNode { protected int key; protected BSTNode left,right; public BSTNode() { left = right = null; }

4 4 Percurso Pré-fixo public void iterativePreorder() { BSTNode p = root; Stack travStack = new Stack(); if (p != null) { travStack.push(p); while (!travStack.isEmpty()) { p = (BSTNode) travStack.pop(); visit(p); if (p.right != null) travStack.push(p.right); if (p.left != null) // filho da esquerda empilhado // após o da direita travStack.push(p.left); // para estar no topo da pilha; }

5 5 Percurso Infixo public void iterativeInorder() { BSTNode p = root; Stack travStack = new Stack(); while (p != null) { while(p != null) { // empilhar filho da direita (se houver) if (p.right != null) // e o próprio nó quando for travStack.push(p.right); // para a esquerda; travStack.push(p); p = p.left; } p = (BSTNode) travStack.pop(); // pop em nó sem filho esquerdo while (!travStack.isEmpty() && p.right == null) { // visita-lo e a todos os nós visit(p); // sem filho direito; p = (BSTNode) travStack.pop(); } visit(p); // visitar também o primeiro nó com if (!travStack.isEmpty()) // um filho direito (se houver); p = (BSTNode) travStack.pop(); else p = null; }

6 6 Percurso Pós-fixo public void iterativePostorder() { BSTNode p = root, q = root; Stack travStack = new Stack(); while (p != null) { for ( ; p.left != null; p = p.left) travStack.push(p); while (p != null && (p.right == null || p.right == q)) { visit(p); q = p; if (travStack.isEmpty()) return; p = (BSTNode) travStack.pop(); } travStack.push(p); p = p.right; }

7 7 Impressão de árvores public void printTree (int inicio, int incremento) { int i; if(!isEmpty ()) { right.printTree (inicio + incremento); for(i = 1; i <= inicio; i++) System.out.print(" "); System.out.print(this.key); left.printTree(inicio + incremento); } // End if(isEmpty()) } // printTree (int n)

8 Implementação C++ Drozdek

9 9 Classe usada para ilustração template class BSTNode { public: BSTNode() { left = right = 0; } BSTNode (const T& el, BSTNode *l = 0, BSTNode *r = 0) { key = el; left = l; right = r; } T key; BSTNode *left, *right;}; }

10 10 Percurso Pré-fixo template void BST ::iterativePreorder() { Stack *> travStack; BSTNode *p = root; if (p != 0) { travStack.push(p); while (!travStack.empty()) { p = travStack.pop(); visit(p); if (p->right != 0) travStack.push(p->right); if (p->left != 0) // filho da esquerda // emplilhado depois // do da direita travStack.push(p->left); // para ficar no topo da pilha; }

11 11 Percurso Infixo template void BST ::iterativeInorder() { Stack *> travStack; BSTNode *p = root; while (p != 0) { while (p != 0) { // empilhar filho da direita (se houver) if (p->right) // e o próprio nó quando for travStack.push(p->right); // para a direita; travStack.push(p); p = p->left; } p = travStack.pop(); // pop em nó sem filho esquerdo while (!travStack.empty() && p->right == 0) { // visita-lo e a todos os nós visit(p); // sem filho direito; p = travStack.pop(); } visit(p); // visitar também o primeiro nó com if (!travStack.empty()) // um filho direito (se houver); p = travStack.pop(); else p = 0; }

12 12 Percurso Pós-fixo template void BST ::iterativePostorder() { Stack *> travStack; BSTNode * p = root, *q = root; while (p != 0) { for ( ; p->left != 0; p = p->left) travStack.push(p); while (p != 0 && (p->right == 0 || p->right == q)) { visit(p); q = p; if (travStack.empty()) return; p = travStack.pop(); } travStack.push(p); p = p->right; }

13 13 Impressão de árvores void Tree::PrintTree1(TreeNode *t, short inicio, short incremento) const { int i; if(t == NULL) return; PrintTree1(t->right(),inicio + incremento); for(i = 0; i < inicio; i++) cout << ' '; cout Key() << ", "; cout << endl; PrintTree1(t->left(),inicio + incremento); } void Tree::PrintTree(void) const { PrintTree1(fRoot, inicio, incremento); }


Carregar ppt "Percurso não recursivo e impressão em árvores binárias Drozdek."

Apresentações semelhantes


Anúncios Google