Wednesday 7 February 2018

Positional notation binary options


(). . ,. . - benzóico. . Quotquot. Quot; quotquot. - benzóico. . . Quotquot. 14:,,,,,,,,,,,,. Capítulo 2 Valores Binários e Sistemas Numéricos. 2 624 Objetivos do capítulo Distinguir entre categorias de números Descrever notação de posição Converter números em. Apresentação sobre o tema: Capítulo 2 Valores binários e sistemas numéricos. 2 624 Objetivos do capítulo Distinguir entre categorias de números Descrever a notação de posição Converter números em outras bases para base 10 Converter números de base 10 em números em outras bases Descreva a relação entre as bases 2, 8 e 16 Explique a importância da computação de bases que são potências de 2 3 3 2 Números Naturais Zero e qualquer número obtido adicionando repetidamente um a ele. 0, 1, 2, 3, 4 Exemplos: 100, 0, 45645, 32 Números Negativos Um valor menor que 0, com um sinal Exemplos: -24, -1. -32 Números 4 4 3 Inteiros Um número natural, um número negativo, zero Exemplos: 249, 0. - 32 Números racionais Um número inteiro ou o quociente de dois inteiros Exemplos: -249, -1, 0, 3/7, -2 / 5 Números 6 6 5 Aha 642 está na BASE 10 A base de um número determina o número de dígitos eo valor das posições de dígito Quando contamos por 10s estamos usando o sistema de numeração Base 10 que é o Sistema Decimal 7 Diferentes Sistemas de Contagem BASE Especifica o número de dígitos usados ​​no sistema Sempre começa com 0 Quando você adiciona mais 1, então, você vai para a próxima posição 10 Base 2: Dois dígitos, 0 e 1 Base 8: 8 dígitos 0, 1, 2, 3 , 4, 5, 6, 7 Base 10: 10 dígitos 0-9 Base 16: 16 dígitos 0 9, AF 7 8 Sistemas de contagem em binário / octal / decimal Estes não são equivalentes. Eles estão apenas mostrando a contagem para cima por 1 unidade 8 9 Notação Posicional 9 6 Continuando com o nosso exemplo 642 na base 10 a notação de posicionamento é: 6 x 10 2 6 x 100 x 10 1 4 x 10 x 10 2 x 1 2 642 na base 10 Este número está na base 10 A potência indica a posição do número 0 é a primeira posição 10 Notação Posicional 10 7 dn R n-1 d n-1 R nd 2 R d 1 Como uma fórmula: 642 é (6 3 10 2) (4 2 10 1) (2 1 10 0) R é a base do número n é o número de dígitos no número d é o dígito na iª posição no número 10 1 0 11 Notação Posicional E se 642 tem a base de 13 Converter para trás 642 na base 13 é equivalente a 1068 na base 10 Eles representam o mesmo número de itens ou unidades. Os números representam os itens de várias maneiras. 6 x 13 2 6 x 169 x 13 1 4 x 13 x 13 2 x 1 2 1068 na base 10 12 12 9 Decimal é a base 10 e tem 10 dígitos: 0,1,2,3,4,5,6,7 , 8,9 O binário é base 2 e tem 2 dígitos: 0,1 Para que um número exista em uma dada base, ele só pode conter os dígitos dessa base, que vão de 0 até (mas não incluindo) a base. Binary 13 Bases Superior a Como são dígitos em bases superiores a 10 representados Com símbolos distintos para 10 e acima. Base 16 tem 16 dígitos - HEXADECIMAL: 0,1,2,3,4,5,6,7,8,9, A, B, C, D, E e F Então você recebe números como 00FF22 Muitas vezes usado para representar Cores em programas web Red Green Blue 000, para FFFFFF 14 Bases Que bases podem ser esses números em 122 198 178 G1A4 Sempre comece em 0, termine na base 1 Então, 0-9 significa base 10 (10-19) Identifique o número de Possíveis unidades na primeira posição, para dar-lhe o número base 14 16 Octal Octal é base 8 Representação numérica pode ser de 0-7 Em seguida, vá para a próxima posição 16 17 17 Qual é o equivalente decimal do número octal 642 Lembre-se disso É Base 8 6 x 8 2 6 x 64 x 8 1 4 x 8 x 8 2 x 1 2 1ª posição 418 na base Conversão Octal para Decimal 18 Conversão Decimal para Outras Bases 18 Enquanto (o quociente não é zero então há um Dividir o número decimal pela nova base Fazer o restante o próximo dígito à esquerda na resposta Substituir o número decimal original pelo quociente Algoritmo para converter o número na base 10 para outras bases 19 19 Converter Decimal em Resposta Octal é. A resposta é. O que é 1988 (base 10) na base 8 Para trás 8 0 20 Converter Decimal para Octal 20 Experimente alguns web / matemática / real / Calculators / BaseConvcalc1.htm Ainda um desafio Tente uma calculadora 24 Apple Programmer Mode Pressione 10 Enter 1988 Pressione 10 Você pode Ver a conversão para viver binário 24 26 26 Computadores têm unidades de armazenamento chamado dígitos binários ou bits Baixa Tensão 0 Alta Tensão 1 todos os bits têm 0 ou 1 22 Números Binários e Computadores 27 Binário e Computadores 27 Byte 8 bits estão em 1 byte O número de Bits em uma palavra determina o comprimento da palavra do computador, mas é geralmente um múltiplo de 8. POR QUE armazenar informações de processo melhor / mais rápido. Máquinas de 32 bits máquinas de 64 bits, etc. 23 30 Converter binário em decimal 30 Qual é o equivalente decimal do número binário. (8 dígitos) 1 x 2 7 1 x 128 x 2 6 1 x 64 x 2 5 1 x 32 x 2 4 1 x 16 x 2 3 1 x 8 x 2 2 1 x 4 x 2 1 1 x 2 x 2 1 X 1 1 256 na base 10 13 31 Convertendo binário para decimal 31 Qual é o equivalente decimal do número binário. (Eu adicionei o 0 no primeiro dígito como um espaço reservado) 0 x 2 7 0 x 64 0 1 x 2 6 1 x 64 x 2 5 1 x 32 x 2 4 0 x 16 x 2 3 1 x 8 x 2 2 1 X 4 x 2 1 1 x 2 x 2 0 x 1 0 110 na base 10 13 32 Aritmética em binário 32 Lembre-se de que há apenas 2 dígitos em binário, 0 e 1 Há apenas 3 opções 0 com um carry (não há 2) Valores de transporte 33 Subtraindo números binários 33 Lembrar empréstimo Aplicar esse conceito aqui 0 1-01 1-10 0-1 emprestar 2 34 Converter binário em decimal 34 Qual é o equivalente decimal do número binário. 1 x 2 7 1 x 128 x 2 6 1 x 64 x 2 5 1 x 32 x 2 4 1 x 16 x 2 3 1 x 8 x 2 2 1 x 4 x 2 1 1 x 2 x 2 1 x 1 1 256 Na base 10 13 36 Números Binários Especiais Muitas vezes você verá números expressos em 8 dígitos para muitas aplicações de computador e rede. O mais baixo é O mais alto seria O que são os equivalentes decimais 0 255 37 Convertendo binário para Octal 37 Marque grupos de 3 (a partir da direita) Converta cada grupo para base x 2 2 1 x 4 x 2 1 0 x 2 x 2 1 x 1 É 253 na base 8 38 38 Qual é o equivalente decimal do número binário. 1 x 2 6 1 x 64 x 2 5 1 x 32 x 2 4 0 x 16 x 2 3 1 x 8 x 2 2 1 x 4 x 2 1 1 x 2 x 2 0 x 1 0 110 na base Conversão de binário para decimal 40 Convertendo Hexadecimal para Decimal 40 Qual é o equivalente decimal do número hexadecimal DEF D x 16 2 13 x 256 E x 16 1 14 x 16 F x 16 15 x 1 15 3567 na base 10 Lembre-se, os dígitos na base 16 são 0 , 1,2,3,4,5,6,7,8,9, A, B, C, D, E, F A10, B11, C12, D13, E14, F15 41 Conversão Decimal em Hexadecimal DEF 21 O que é 3567 (base 10) na base 16 Para trás 42 Convertendo binário para hexadecimal 42 Marque grupos de 4 (a partir da direita) Converta cada grupo AB é AB na base 16 18 43 Convertendo binário para hexadecimal 43 Converta em decimal primeiro e depois em hexadec 1010 10 A 1011 11 BAB é AB na base 16 18 45 No exame, você terá que converter manualmente entre: Decimal Binary Octal Hexadecimal 45 Revisão 46 Questões Éticas Tenth Strand 46 O que é Iron Man CC2017 O que é uma Unidade de Conhecimento O que é Curricula 2001 Quem colocou Todas as estruturas de dados que consideramos até este ponto foram quotlinearquot Isto é, eles podem ser vistos como uma lista de objetos onde cada item tem um sucessor e um antecessor (exceto que o primeiro item Não tem um antecessor eo último item não tem um sucessor). Essas estruturas lineares incluíam: matrizes, vetores, listas vinculadas, pilhas e filas. Mas, uma organização linear nem sempre é a mais lógica ou eficiente. Em uma lista vinculada, por exemplo, cada nó faz referência a um outro nó (ou possivelmente dois no caso de uma lista duplamente vinculada, mas este é apenas um link para o nó que faz referência a ele). Mas, em muitos casos, faz sentido que um nó faça referência a mais de um outro nó (isto é, vários sucessores). Isso leva a estruturas conhecidas como árvores. NOTA: Normalmente desenharemos diagramas de nossas árvores de cabeça para baixo. Ou seja, o nó principal da árvore estará na parte superior do diagrama, e os nós que ele referencia será abaixo (como visto no diagrama à direita). 2. Árvore Terminologia Para referência e discussão, as partes de uma árvore ADT e as relações entre os seus elementos são dados nomes. Esta terminologia é uma combinação de árvores dendrológicas e árvores genealógicas. Os mais comuns incluem: Nó - Um elemento da árvore que contém dados e links para outros nós. Edge (aka: branch) - Uma conexão entre dois nós (isto é, uma referência ou link). Árvore trivial - Uma árvore vazia (ou seja, sem nós). Raiz - O nó mais alto na árvore. O nó vermelho no diagrama acima é a raiz. Leaf - Um nó em uma árvore que não faz referência a nenhum outro nó. Os nós verdes e amarelos no diagrama acima são folhas. Parent - O pai de um nó é o nó que faz referência a ele. Na maioria dos casos, os nós terão um pai único (embora isso não seja necessário em todas as estruturas de árvore). No diagrama acima, o nó vermelho é o pai dos dois nós azuis. A raiz de uma árvore é o único nó sem pai. Criança - Um filho de um nó é qualquer nó referenciado pelo nó. No diagrama acima, o nó azul à esquerda tem um filho (o nó amarelo) eo nó azul do lado direito tem três filhos (os nós verdes). Uma folha é, portanto, um nó sem filhos. Irmãos - Dois ou mais nós que têm o mesmo pai. Os três nós verdes no diagrama acima são irmãos, mas o nó amarelo não tem irmãos. Outros parentes. Ocasionalmente, podemos nos referir a primos. Tios E / ou sobrinhas. Você deve ter a idéia Ancestrais - Os antepassados ​​de um nó incluem seu pai e seus pais antepassados. Observe o caráter recursivo desta definição. Recursão é muito comum com a definição e processamento de árvores. Descendente - Os descendentes de um nó são seus filhos e descendentes de seus filhos. Subárvore - Árvore constituída por um nó e todos os seus descendentes. Portanto, todos os nós de uma árvore são raízes de uma subárvore. Com isso em mente, qualquer nó de uma árvore pode ser tratado como a raiz de uma árvore. Este conceito é a base para o processamento de árvores recursivamente. Binary Tree - Uma árvore whos nós podem ter no máximo dois filhos. A árvore no diagrama acima NÃO é uma árvore binária porque o nó azul direito tem três filhos (os nós verdes). As árvores com as quais trabalharemos serão árvores binárias. Caminho - A seqüência única (mais curta) de arestas forma um nó para outro nó. O comprimento do caminho é o número de arestas. Nível (AKA: depth) - O nível de um nó é o número de nós no caminho desse nó para a raiz da árvore. Portanto, a raiz está no nível 1 (o nó vermelho no diagrama), as crianças raízes estão no nível 2 (os nós azuis no diagrama), as raízes netos estão no nível 3 (os nós amarelos e verdes no diagrama) , Etc. NOTA: Definições alternativas de nível usam o comprimento do caminho (ou seja, o nível de raízes é 0, as raízes as crianças estão no nível 2, etc). Usaremos a definição dada em nosso livro de texto (ou seja, o nível de raízes é 1). Altura - A altura de um nó é o número de nós no caminho mais longo desse nó para uma folha. A altura de uma árvore é a altura de sua raiz. No diagrama, o nó vermelho tem altura 3 (que também é a altura da árvore), os nós azuis têm altura 2 e os nós amarelo e verde têm altura 1. NOTA: As definições alternativas de altura usam o comprimento do maior Caminho (ou seja, um menos do que a nossa definição de livros). Usaremos a definição dada em nosso livro didático. Árvore Completa - Uma árvore na qual cada folha está no mesmo nível e cada não-folha tem tantas crianças quanto possível (isto é, 2 para uma árvore binária). Árvore Completa - Uma árvore cheia com 0 ou mais de suas folhas quotrightmostquot faltando. Observe que todas as árvores completas estão completas, mas nem todas as árvores completas estão cheias. Grau - O grau de um nó é o número de seus filhos. O grau de uma árvore é o máximo dos graus de seus nós. No diagrama, o nó vermelho tem grau 2, o nó azul esquerdo tem grau 1, o nó azul direito tem grau 3 eo resto dos nós tem grau 0. Portanto, o grau da árvore é 3. Portanto, um Árvore binária terá um grau de dois ou menos. Equilibrado - Uma árvore é balanceada se o número de nós em sua subárvore esquerda diferir do número de nós em sua subárvore direita por não mais do que um e seus subárvores esquerdo e direito também são equilibrados. Observe o caráter recursivo desta definição. 3. A Árvore Binária ADT NOTA: A seguir segue-se uma definição mais tradicional de uma árvore binária do que a usada pelo nosso livro. Uma árvore binária consiste em nós com um antecessor e no máximo dois sucessores (chamados de criança esquerda e criança certa). A única exceção é o nó raiz da árvore que não tem um antecessor. Um nó pode conter qualquer quantidade e qualquer tipo de dados. Operações (isto é, Construtores e Métodos): create - Uma árvore binária pode ser criada em vários estados. Os mais comuns incluem. Uma árvore vazia (ou seja, sem nós) e, portanto, o construtor não terá parâmetros uma árvore com um nó (ou seja, a raiz) e, portanto, o construtor terá um único parâmetro (os dados para o nó raiz) As crianças são outras árvores existentes e, portanto, o construtor terá três parâmetros (os dados para o nó raiz e referências a seus subárvores) isEmpty () - Retorna true se não houver nós na árvore, false caso contrário. IsFull () - Pode ser exigido por algumas implementações. Retorna true se a árvore estiver cheia, false caso contrário. Clear () - Remove todos os nós da árvore (essencialmente reinicializando-o para uma nova árvore vazia). Add (value) - Adiciona um novo nó à árvore com o valor especificado. A implementação real deste método é determinada pela finalidade para a árvore e como a árvore deve ser mantida e / ou processada. Para começar, assumiremos nenhuma finalidade ou ordem específica e, portanto, adicionar novos nós de tal forma que a árvore permanecerá quase equilibrada. Remove () - Remove o nó raiz da árvore e retorna seus dados. A implementação real deste método e outras formas de remoção será determinada pela finalidade para a árvore e como a árvore deve ser mantida e / ou processada. Por exemplo, você pode precisar de um método remove () com um parâmetro que indica qual nó da árvore deve ser removido (com base na posição, dados-chave ou referência). Para começar, não assumiremos nenhuma finalidade ou ordem específica e, portanto, removeremos a raiz de tal forma que a árvore permanecerá quase equilibrada. Outras operações que podem ser incluídas conforme necessário: height () - Determina a altura da árvore. Uma árvore vazia terá altura 0. size () - Determina o número de nós na árvore. GetRootData () - Retorna os dados (dados primitivos) ou referência aos dados (objetos) da raiz das árvores. GetLeftSubtree () - Retorna uma referência à subárvore esquerda desta árvore. GetRightSubtree () - Retorna uma referência à subárvore direita dessa árvore. 4. Traversais de árvores binárias Tal como acontece com listas ligadas e matrizes, muitas vezes é necessário quotvisitquot e fazer algo com cada nó na árvore. Com listas vinculadas e matrizes, cada nó tinha um sucessor único, portanto, a maneira natural de percorrer a estrutura de dados era do primeiro item até o último. Com uma árvore binária, realmente não há primeiro, segundo. Ou último item (ou seja, as árvores não são quotorderedquot estruturas de dados da mesma forma que as estruturas de dados linear foram. Portanto, existem várias maneiras de percorrer uma árvore binária. Os mais comuns incluem: pré-ordem - Visite a raiz, visite todos os Nodos na subárvore das raízes esquerdas e, em seguida, visite todos os nós na subárvore da direita das raízes - visite todos os nós na subárvore esquerda das raízes, visite a raiz e, em seguida, visite todos os nós na direita das raízes Subtree post-order - Visite todos os nós na subárvore da esquerda das raízes, visite todos os nós na subárvore da direita das raízes e visite a raiz level-order - Visite os nós por nível Os nós de cada nível são Visitado da esquerda para a direita, este método é realmente o mais difícil e raramente usado. Por exemplo, usando a árvore acima, esses esquemas de percurso visitariam os nós nos seguintes pedidos: pré-ordem A - B - D - C - E - G - H - F em ordem D - B - A - G - E - H - C - F pós ordem D - B - G - H - E - F - C - A ordem de nível A - B - C - D - E - F - G - H Que ordenação deve ser usada Depende da aplicação particular da árvore. 5. Implementações de árvores binárias Existem três formas primárias de implementar estruturas arbóreas. Dois deles envolvem arrays eo terceiro utiliza referências (ie links). Implementação 1 - Uma matriz de nós Esta implementação é muito semelhante à implementação de matriz de uma lista vinculada. O seguinte demonstra como uma árvore pode ser armazenada em uma matriz. O valor de root indica o índice do nó raiz na matriz. Os valores de leftChild e rightChild indicam os índices da matriz onde os nós filhos estão localizados. Um valor de -1 é usado para indicar que não há nenhuma criança. As posições na matriz não utilizadas atualmente pela árvore são nós que compõem o espaço livre. Estes nós formam uma pilha. O valor de free indica o índice do topo da pilha (primeiro nó disponível). O leftChild indica o índice do próximo nó na pilha (ou seja, espaço livre). Root3 free4 maxNodes12 Observe que existem duas condições que determinarão se um nó não tem um filho esquerdo ou direito. Não há criança esquerda (criança direita seria semelhante) do item na posição k se. 2k1 é maior ou igual ao tamanho da matriz, ou 2k1 é menor que o tamanho da matriz, mas o valor armazenado nessa posição é nulo. O seguinte poderia ser usado para esta implementação de uma árvore binária. Implementação 3 - Implementação baseada em referência (vinculada) Com o uso de uma estrutura vinculada (semelhante a listas vinculadas), uma árvore binária pode ser construída e gerenciada dinamicamente. Primeiro, uma classe de nó é necessária. Usando esta classe de nó, uma classe BinaryTree pode ser implementada da seguinte maneira (incluindo, neste caso, implementações dos métodos ADT Binary Tree acima): 6. Traversals of Binary Trees - Revisited Agora que várias implementações de árvores binárias foram investigadas, O tópico de percorrer essas implementações precisa ser revisitado. Como mencionado acima, existem 4 métodos principais (ou seja, ordens) para percorrer uma árvore binária: pré-ordem - Visite a raiz, visite todos os nós na subárvore esquerda das raízes e, em seguida, visite todos os nós na subárvore da direita das raízes . In-order - Visite todos os nós na subárvore esquerda das raízes, visite a raiz e, em seguida, visite todos os nós na subárvore direita das raízes. Pós-ordem - Visite todos os nós na subárvore esquerda das raízes, visite todos os nós na subárvore direita das raízes e, em seguida, visite a raiz. Level-order - Visite os nós por nível. Os nós de cada nível são visitados da esquerda para a direita. Este método é realmente o mais difícil e raramente é usado. Suponha que existe um método doIt (item Object) que determina o que deve ser feito com os dados de cada nó à medida que a árvore é percorrida. Se esses métodos forem externos à definição de classe BinaryTree, ou interno Se for externo, você precisará (pelo menos: deve) usar os métodos da classe BinaryTree para acessar os dados. Se interna, você poderia usar a implementação particular, mas o método doIt () precisaria ser definido nessa classe também. Para demonstrar estas opções, o seguinte fornece as duas implementações opcionais de um percurso de pré-ordem (pós-ordem e ordem seria semelhante): Percursos em ordem e pós-ordem podem ser implementados como acima, reorganizando apenas as três instruções. Mas o que dizer nível-ordem Neste caso, a esquerda e direita subárvores devem ser processados ​​após todos os irmãos e primos são processados. Isto é, estas subárvores devem ser colocadas em espera (isto é, numa fila) até que todos os nós do nível anterior sejam processados. Uma implementação externa para um percurso de nível-ordem poderia, portanto, ser implementada da seguinte forma. 8. Árvores de Expressão (Uma Aplicação de Árvores Binárias) Uma aplicação importante de árvores binárias é a representação de expressões formadas por operadores binários, constantes e variáveis. Esses tipos de árvores são usados ​​por linguagens de programação para representar expressões e por aplicativos que devem ter uma expressão como entrada do usuário (uma string) e ser capaz de avaliar essa expressão (repetidamente e eficientemente). Operadores binários. Um operador binário é uma operação que age em dois valores e produz um único resultado. Limitaremos nossa discussão aqui a expressões que usam os cinco operadores binários. (Adição) - (subtração, não negação) (multiplicação) / (divisão) (exponenciação) Uma árvore de expressão consistirá de nós cujos dados são um operador ou um valor (constante ou variável). Os nós do operador terão SEMPRE dois filhos que representam seus operandos. Os nós de valor serão SEMPRE folheados. NOTA: Em todos os casos, a criança esquerda (folha ou subárvore) será considerada o primeiro operando ea criança direita (folha ou subárvore) será considerada o segundo operando. Para adição e multiplicação isso não é um problema, mas para as outras operações fará a diferença. Expressões. Como discutido no termo anterior, existem três formas de representar expressões algébricas. Infixo (notação padrão): Coloque o operador entre os operandos (exemplo: 2 3). O problema com este método é regras para a ordem das operações. Prefixo (aka: notação polonesa): Coloque o operador antes de seus operandos (exemplo: 2 3). Com esta notação, não são necessários parênteses. A principal consideração é a separação de operandos consecutivos (normalmente um único espaço é usado). Postfix (aka: reverse Polish notation - RPN): Coloque o operador após seus operandos (exemplo: 2 3). Com esta notação, não são necessários parênteses. A principal consideração é a separação de operandos consecutivos (normalmente um único espaço é usado). Existe uma relação entre expressões de expressão e as travessias de árvores de expressão Sim em ordem de passagem dá a expressão infixo (parênteses devem ser incluídos, embora alguns deles não serão necessários na expressão final) percorrer pré-ordem dá o prefixo post de expressão - order traversal dá a expressão postfix Portanto, para qualquer expressão existe uma única árvore de expressão. A árvore é independente da notação matemática. Construindo uma Árvore de Expressão Dada uma expressão como uma seqüência de caracteres, árvores de expressão podem ser construídas dependendo do tipo de expressão usada. O algoritmo a seguir constrói uma árvore de expressão fora de uma expressão de infixo. NOTA: Assume-se que existe um método que determina a precedência do operador (um parêntese esquerdo tem a precedência mais baixa). Crie duas pilhas. A primeira pilha é uma pilha de referências a nós que representam valores. Podem ser referências a nós de folhas (contendo uma constante ou variável) ou referências a raízes de árvores de expressão completas (subárvores da árvore de expressão final). A segunda pilha é uma pilha de operadores (caracteres) que ainda não foram adicionados à árvore de expressão. Digitalize a expressão (uma seqüência de caracteres) da esquerda para a direita. Ignorar espaços. Se o item seguinte for um parêntese esquerdo, empurre o parêntese esquerdo para a segunda pilha. Se o próximo item da string for um operador. Se a segunda pilha estiver vazia, empurre o operador (caractere) para a segunda pilha. Se a segunda pilha não estiver vazia, enquanto a precedência do operador no topo da segunda pilha é maior ou igual ao novo operador. Pop um operador da pilha pop dois nós de valor da primeira pilha. Crie um novo nó cujos dados são o operador e cujos filhos são os nodos salientes da segunda pilha empurrar o novo nó para a primeira pilha. Empurre o novo operador (carácter) para a segunda pilha. Se o próximo item na seqüência de caracteres é um valor. Crie um novo nó folha com o valor como seus dados. Nota: O valor pode ser uma variável ou um número. Empurre a referência de nó para a primeira pilha. Se o próximo item na seqüência de caracteres é um parêntese direito. Enquanto o operador na parte superior da segunda pilha não é um parêntese esquerdo. Pop um operador da pilha pop dois nós de valor da primeira pilha criar um novo nó cujos dados é o operador e cujos filhos são os nodos da segunda pilha empurrar o novo nó para a primeira pilha Pop o parêntese esquerdo fora da pilha (descartar). Depois que a expressão está esgotada, Enquanto a segunda pilha não está vazia. Pop um operador a partir da pilha pop dois nós de valor da primeira pilha criar um novo nó cujos dados é o operador e cujos filhos são os nodos popped da segunda pilha empurrar o novo nó para a primeira pilha A primeira pilha agora deve ter apenas Um item nele (uma referência ao nó raiz da árvore de expressão concluída). Portanto, pop a primeira pilha e retornar essa referência. As árvores Expression Tree Node Expression têm três tipos de nós. Operador, nós de operando que contêm um número específico e nós de operando que contêm uma variável. O filho de um nó (operador) pode ser qualquer um dos três tipos de nós. Mas um link pode referenciar apenas um tipo de objeto. Portanto, um nó universal precisa ser criado que pode representar as três opções. Uma tal implementação poderia ser a seguinte (isto assume apenas uma possibilidade para a variável): Note que se o campo operador é o caractere n, então o nó é um operando contendo um número específico. Se o campo operador for o caractere x, então o nó é um operando que contém a variável. Se o campo operador é qualquer outra coisa, o nó é um operador. Avaliando uma Árvore de Expressão Uma vez que uma árvore de expressão é construída, ela pode ser usada para avaliar a expressão quantas vezes forem necessárias e em diferentes valores de suas variáveis ​​(se houver). O seguinte algoritmo recursivo pode ser usado para avaliar a árvore de expressão. Se o nó raiz é um operando (ou seja, folha), o valor da expressão é os dados armazenados no nó raiz. Se o nó raiz é um operador, o valor da expressão é esse operador aplicado ao valor de sua subárvore esquerda eo valor de sua subárvore direita. Usando a implementação do ExpressionTreeNode acima, o seguinte implementaria este algoritmo: Assumindo a existência da declaração. Onde ExpressionTree é um BinaryTree como definido acima, então este método seria executado da seguinte maneira. Onde number é o valor para a variável na expressão. 9. Uma implementação alternativa vinculada de árvores binárias Uma visão alternativa de uma árvore binária é considerar cada nó como árvore (ou pelo menos a raiz de uma árvore). Ou seja, em vez de usar duas classes (uma classe de nó de árvore que é usada pela classe de árvore binária), uma única classe pode ser usada. Esta classe de árvore binária alternativa é essencialmente apenas um nó. Portanto, a implementação poderia ser a seguinte: Que implementação deve ser usada Por que

No comments:

Post a Comment