#includetypedef struct Node{ int val; struct Node* Lchild; struct Node* Rchild; }*BTree, BTnode; int CreaTree(BTree* T) { int data; scanf_s("%d", &data); if (data == 0x0) *T = NULL; else { *T = (BTree)malloc(sizeof(BTnode)); if (*T == 0) { printf("malloc space error!"); return 0; } else { (*T)->val = data; } CreaTree(&(*T)->Lchild); CreaTree(&(*T)->Rchild); } return 1; } void preorder(BTree T, int* res, int* resSize) { if (T == NULL) return; else { res[*resSize] = T->val; printf("%dt", T->val); *resSize += 1; preorder(T->Lchild,res,resSize); preorder(T->Rchild, res, resSize); } } int* preorderTraversal(BTree T, int* returnSize) { int* res = malloc(sizeof(int)* 501); returnSize = malloc(sizeof(int)); *returnSize = 0; preorder(T,res,returnSize); return res; } void DestoryBTree(BTree* T) { if (*T) { if ((*T)->Lchild){ DestoryBTree(&(*T)->Lchild); } if ((*T)->Rchild) { DestoryBTree(&(*T)->Rchild); } free(*T); *T = NULL; } } int main(void) { BTree T; int* res1 = (int *)malloc(sizeof(int)); while (1) { printf("请输入二叉树,以0作为结束:n"); CreaTree(&T); printf("前序遍历的结果为:n"); preorderTraversal(T, res1); DestoryBTree(&T); printf("n销毁二叉树完成,请输入新二叉树。n"); } return 0; }
循环输入:
a. 1 0 2 3 0 0 0
b. 0
c. 1 0 0
d.1 2 0
e.1 0 2 0 0
涉及知识点:
1.二叉树的创建:CreaTree
2.二叉树的前序遍历:preorder
3.二叉树的销毁:DestoryBTree
4.指针内存的申请和释放;



