void printFlattenedTree(int A[], int maxLength, FILE *file) { int i; int currentLevel; int nextLevelStartIndex; int height; // Calculate the height of the tree this way to avoid // relying on (log maxLength) for (currentLevel = 0, i = 0; i < maxLength; i++) { nextLevelStartIndex = (1 << (currentLevel + 1)) - 1; if ((i + 1) == nextLevelStartIndex) { currentLevel++; } } height = currentLevel; for (currentLevel = 0, i = 0; i < maxLength; i++) { nextLevelStartIndex = (1 << (currentLevel + 1)) - 1; printTreeNode(A[i], height - currentLevel, file); if ((i + 1) == nextLevelStartIndex) { currentLevel++; fprintf(file, "\n\n"); } } fprintf(file, "\n\n"); }
TreeNode *newTreeNode(NodeKind kind){ TreeNode* t = (TreeNode *) malloc(sizeof(TreeNode)); t->child = NULL; t->sibling = NULL; t->nodekind = kind; t->tokenString = NULL; t->nChild = 0; if (traceflag) printTreeNode(t); return t; }
void printTree(TreeNode* pRoot) { printTreeNode(pRoot); if(pRoot != NULL) { std::vector<TreeNode*>::iterator i = pRoot->m_vChildren.begin(); while(i < pRoot->m_vChildren.end()) { printTree(*i); ++i; } } }
void printTree(treeNode * ptr, int indent){ if(ptr==NULL) return; printf("%*s", indent, ""); printTreeNode(ptr); indent += 4; treeNode * temp = ptr->children[0]; int i=1; while(temp!=NULL && i < temp->numChildren){ printTree(temp, indent); temp = ptr->children[i]; i++; } indent -= 4; }
TreeNode *newTokenTreeNode(NodeKind kind, char* tokenString){ TreeNode* t = (TreeNode *) malloc(sizeof(TreeNode)); t->child = NULL; t->sibling = NULL; t->nodekind = kind; t->nChild = 0; t->lineno = lineno; int len = strlen(tokenString); t->tokenString = (char *)malloc(len + 1); strcpy(t->tokenString, tokenString); (t->tokenString)[len] = '\0'; if (traceflag) printTreeNode(t); return t; }
void printFromTopToBottom(TreeNode* root){ if(root==NULL){ return; } std::deque<TreeNode*> dequeTreeNode; dequeTreeNode.push_back(root); while(!dequeTreeNode.empty()){ TreeNode* pNode=dequeTreeNode.front(); dequeTreeNode.pop_front(); printTreeNode(pNode); if(pNode->left!=NULL){ dequeTreeNode.push_back(pNode->left); } if(pNode->right!=NULL){ dequeTreeNode.push_back(pNode->right); } } }