#include <stdio.h>
#include <malloc.h>
struct TreeNode {
int val;
struct TreeNode* left, * right;
};
int tree_size(/*struct TreeNode* tree*/) { return 7; }
int* preorder_(struct TreeNode* tn, int* v) {
*v++ = tn->val;
if (tn->left) v = preorder_(tn->left, v);
if (tn->right) v = preorder_(tn->right, v);
return v;
}
int* preorder(struct TreeNode* tn) {
if (tn) {
int* v
= malloc(tree_size
(/*tn*/) * sizeof(int)); preorder_(tn, v);
return v;
} else {
return NULL;
}
}
int main(void) {
// 4
// 2 5
// 1 3 6 7
struct TreeNode
lleft = {1}, lright = {3}, leftroot = {2, &lleft, &lright},
rleft = {6}, rright = {7}, rightroot = {5, &rleft, &rright},
root = {4, &leftroot, &rightroot};
int *v, i;
v = preorder(&root);
for (i = 0; i < tree_size(/*tn*/); i++) {
printf("%d ", v
[i
]); // 4 2 1 3 5 6 7 }
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYWxsb2MuaD4KCnN0cnVjdCBUcmVlTm9kZSB7CglpbnQgdmFsOwoJc3RydWN0IFRyZWVOb2RlKiBsZWZ0LCAqIHJpZ2h0Owp9OwoKaW50IHRyZWVfc2l6ZSgvKnN0cnVjdCBUcmVlTm9kZSogdHJlZSovKSB7IHJldHVybiA3OyB9CgppbnQqIHByZW9yZGVyXyhzdHJ1Y3QgVHJlZU5vZGUqIHRuLCBpbnQqIHYpIHsKICAgICp2KysgPSB0bi0+dmFsOwoJaWYgKHRuLT5sZWZ0KSB2ID0gcHJlb3JkZXJfKHRuLT5sZWZ0LCB2KTsKCWlmICh0bi0+cmlnaHQpIHYgPSBwcmVvcmRlcl8odG4tPnJpZ2h0LCB2KTsKCglyZXR1cm4gdjsKfQoKaW50KiBwcmVvcmRlcihzdHJ1Y3QgVHJlZU5vZGUqIHRuKSB7CglpZiAodG4pIHsKCQlpbnQqIHYgPSBtYWxsb2ModHJlZV9zaXplKC8qdG4qLykgKiBzaXplb2YoaW50KSk7CgkJcHJlb3JkZXJfKHRuLCB2KTsKCQlyZXR1cm4gdjsKCX0gZWxzZSB7CgkJcmV0dXJuIE5VTEw7Cgl9Cn0KCmludCBtYWluKHZvaWQpIHsKCS8vICAgIDQKCS8vICAyICAgNQoJLy8gMSAzIDYgNwoJc3RydWN0IFRyZWVOb2RlIAoJICAgIGxsZWZ0ID0gezF9LCBscmlnaHQgPSB7M30sIGxlZnRyb290ID0gezIsICZsbGVmdCwgJmxyaWdodH0sIAoJCXJsZWZ0ID0gezZ9LCBycmlnaHQgPSB7N30sIHJpZ2h0cm9vdCA9IHs1LCAmcmxlZnQsICZycmlnaHR9LCAKCQlyb290ID0gezQsICZsZWZ0cm9vdCwgJnJpZ2h0cm9vdH07CglpbnQgKnYsIGk7CgkKCXYgPSBwcmVvcmRlcigmcm9vdCk7Cglmb3IgKGkgPSAwOyBpIDwgdHJlZV9zaXplKC8qdG4qLyk7IGkrKykgewoJCXByaW50ZigiJWQgIiwgdltpXSk7IC8vIDQgMiAxIDMgNSA2IDcKCX0KCWZyZWUodik7CgkKCXJldHVybiAwOwp9Cg==