// data && leftTree && rightTree void preTraverse(TreeNode* root){ if(!root){ return; } printf("%c",root->element); preTraverse(root->lc); preTraverse(root->rc); }
/** * 前序遍历二叉树 */ void preTraverse(btree *t) { if (t) { printf("%c ", t->data); preTraverse(t->lchild); preTraverse(t->rchild); } }
int main(void) { int i; char *post, *order; btree *t; while (scanf("%d", &n) != EOF) { post = (char *)malloc(n); order = (char *)malloc(n); getchar(); for (i = 0; i < n; i ++) scanf("%c", order + i); getchar(); for (i = 0; i < n; i ++) scanf("%c", post + i); t = rebuildTree(order, post, n); preTraverse(t); printf("\n"); free(post); free(order); } return 0; }
// test all the 4 traverses void testTraverse(TreeNode* root){ printf("Traverse data && leftTree && rightTree:\n"); preTraverse(root); printf("\nTraverse leftTree && data && rightTree:\n"); inTraverse(root); printf("\nTraverse leftTree && rightTree && data:\n"); postTraverse(root); printf("\nTraverse by level: \n"); levelTraverse(root); printf("\n"); }
void Node::traverse(RenderContext &ctx, const std::string& operation) { ctx._childMTime = TimeStamp(); bool traverseChildren = true; preTraverse(ctx, operation, traverseChildren); ctx.level++; if (traverseChildren) { for (auto &child : properties.children) child.second->traverse(ctx, operation); } ctx.level--; ctx._childMTime = childrenLastModified(); postTraverse(ctx, operation); }